洛谷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 == 0 && i

这篇博客是作者的第一篇题解,讨论了洛谷P1734题目——如何选择不超过S的正整数,使得所有数的约数和最大。将问题转化为01背包问题,通过创建dp和yue数组记录前i个数的最大价值和第i个数的约数和,并提供了一个求解约数和的函数yueshu。博客中提供了完整的代码实现。

588

被折叠的 条评论
为什么被折叠?



