P1734 最大约数和
Posted wjc2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1734 最大约数和相关的知识,希望对你有一定的参考价值。
题目描述
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入格式
输入一个正整数S。
输出格式
输出最大的约数之和。
输入输出样例
输入 #1
11
输出 #1
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; }
以上是关于P1734 最大约数和的主要内容,如果未能解决你的问题,请参考以下文章