洛谷 P1734 最大约数和
题目描述
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入输出格式
输入格式:
输入一个正整数S。
输出格式:
输出最大的约数之和。
输入输出样例
输入样例#1:
11
输出样例#1:
9
说明
样例说明
取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
数据规模
S<=1000
思路:先计算一个数的约数,然后跑01背包。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int s,f[10000],prime[10000]; int main(){ cin>>s; for(int i=1;i<=s;i++) for(int j=1;j<i;j++) if(i%j==0) prime[i]+=j; for(int i=1;i<=s;i++) for(int j=s;j>=i;j--) f[j]=max(f[j],f[j-i]+prime[i]); cout<<f[s]; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。