洛谷 P1734 最大约数和

题目描述

选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。

输入输出格式

输入格式:

输入一个正整数S。

输出格式:

输出最大的约数之和。

输入输出样例

输入样例#1:
11
输出样例#1:
9

说明

样例说明

取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。

数据规模

S<=1000

背包dp
dp入门中。。
屠龙宝刀点击就送
#include <cstdio>
#include <cmath>
int dp[100005],s[1005],l;
void init()
{
    for(int sum=1,i=1;i<=1000;i++,sum=1)
    {
        for(int j=2;j<=sqrt(i);j++)
        {
            if(i%j==0)
            {
                sum+=j;
                if(j!=i/j) sum+=i/j;
            }
        }
        s[i]=sum;
    }
    s[1]=0;
}
int max(int a,int b) {return a>b?a:b;}
int main()
{
    init();
    scanf("%d",&l);
    for(int i=2;i<=l;i++)
        for(int j=l;j>=i;j--)
            dp[j]=max(dp[j-i]+s[i],dp[j]);
    printf("%d
",dp[l]);
    return 0;
}


 
我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
原文地址:https://www.cnblogs.com/ruojisun/p/7359088.html