首页 > 其他 > 详细

【洛谷】【动态规划/01背包】P1734 最大约数和

时间:2018-06-21 16:11:12      阅读:217      评论:0      收藏:0      [点我收藏+]

【题目描述:】

选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。

【输入格式:】

输入一个正整数S。

【输出格式:】

输出最大的约数之和。


[算法分析:]

01背包,每个数的约数和为其价值,数的大小为其花费

注意1的价值应该为0


[Code:]

#include<iostream>
#include<cstdio>
using namespace std;

int n, v[1001], f[1001];

int work(int x) {
    if(x == 1) return 0;
    int l = x/2, ret = 1;
    for(int i=2; i<=l; ++i)
        if(x % i == 0) ret += i;
    return ret;
}

int main() {
    cin >> n;
    for(int i=1; i<=n; ++i) v[i] = work(i);
    for(int i=1; i<=n; ++i)
        for(int j=n; j>=i; --j)
            f[j] = max(f[j], f[j-i]+v[i]);
    cout << f[n];
}

【洛谷】【动态规划/01背包】P1734 最大约数和

原文:https://www.cnblogs.com/devilk-sjj/p/9209358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!