洛谷-P1734 最大约数和
题目描述
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入格式
输入一个正整数S。
输出格式
输出最大的约数之和。
输入输出样例
输入 #1
11
输出 #1
9
说明/提示
样例说明
取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
数据规模
S<=1000
C++代码
#include <iostream>
using namespace std;
int a[1005],dp[1005];
int sum_prime(int n) {
int ans = 0;
for (int i=1; i<n; ++i)
if (n % i == 0)
ans += i;
return ans;
}
int main() {
int s;
cin >> s;
for (int i=1; i<=s; ++i)
a[i] = sum_prime(i);
for (int i=1; i<=s; ++i)
for (int j=s; j>=i; --j)
dp[j] = max(dp[j], dp[j-i]+a[i]);
cout << dp[s] << endl;
return 0;
}