洛谷P1734 最大约数和 题解
本蒟蒻的第一篇题解,这是一道十足的水题。
题意如下:
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
问题分析:
我们可以把这道题看做一个01背包问题
翻译一下这个问题:
有一个大小为 S 的背包,有 S 个物品,第 i 个物品的体积为 i,价值为i的因数之和,现在求如何放置物品,能使拿到的价值最大。
写到这里,做法已经很明显了。
创立两个数组 dp[],yue[].用以存放选前i个数能得到的最大价值,yue[i]表示第i个数的约数之和(也就是价值)。
首先我们要建立一个函数yueshu(int x)表示求x的约数之和。
int yueshu(int x)
{
int xx=0;
for(int i=1;i<=sqrt(x);i++)//小于√x即可
{
if(x%i == 0 && i != sqrt(x))//如果是因数
{
xx=xx+i+x/i;相加
continue;
}
if(x % i ==