题解 P1734 【最大约数和】
这道题很显然不用说是01背包
可以把数字约数的和看成是价值v[],而数字的值是重量w[],将这两个算出来后,就能直接套01背包模板了,是不是很简单?
#include<iostream>
using namespace std;
int f[10001],w[10001],v[10001],s;
int main()
{
int i,j;
cin>>s;
for(i=1;i<=s;i++)
{
w[i]=i;
for(j=1;j<=i/2;j++)
if(i%j==0)//是约数
v[i]+=j;//累加
}
for(i=1;i<=s;i++)//01背包模板。。
for(j=w[i];j<=s;j++)
f[j]=max(f[j],f[j-w[i]]+v[i]);
cout<<f[s];
return 0;
}