洛谷P1734 最大约数和 题解

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

洛谷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 ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值