标签:背包 pac 格式 超过 include put clu NPU inpu
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入一个正整数S。
输出最大的约数之和。
11
9
样例说明
取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
数据规模
S<=1000
思路:01背包。
将一个数字本身当作体积,约数和当作价值。就是个01背包
#include <iostream> #include<bitset> #include<string> using namespace std; const int maxn= 200005; long long f[maxn]; long long a[maxn]; int main() { int s; cin >> s; a[1]=0; for(int i=2;i<=s;i++) { long long ans=1; for(int j=2;j<=i/j;j++) { if(i%j==0) { ans+=j; if(j*j!=i) ans+=i/j; } } a[i]=ans; } /*for(int i=1;i<=s;i++) cout << a[i] << endl;*/ for(int i=1;i<=s;i++) { for(int j=s;j>=i;j--) { f[j]=max(f[j],f[j-i]+a[i]); } } cout << f[s] << endl; return 0; }
标签:背包 pac 格式 超过 include put clu NPU inpu
原文地址:https://www.cnblogs.com/wjc2021/p/11708501.html