zoukankan      html  css  js  c++  java
  • 洛谷P1734 最大约数和(01背包)

    题目描述

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

    输入格式

    输入一个正整数S。

    输出格式

    输出最大的约数之和。

    输入输出样例

    输入 #1 
    11
    输出 #1 
    9

    说明/提示

    样例说明

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

    数据规模

    S<=1000

    水题,注意体积维度是数字和(不超过S),价值维度是因子和。注意:因子不含本身,1的话因子和是0。
    #include <bits/stdc++.h>
    using namespace std;
    int s[1005];
    int dp[1005]={0};
    int calc(int n)
    {
        int ans=0,i;
        for(i=1;i<=n;i++)
        {
            if(i>sqrt(n))break;
            if(n%i!=0)continue;
            if(n/i==i)ans+=i;
            else ans=ans+i+n/i;
        }
        ans-=n;
        return ans;
    }
    int main()
    {
        int i,j;
        int S;
        cin>>S;
        int ans=0;
        for(i=1;i<=S;i++)
        {
            s[i]=calc(i);//预处理出因子和
        }
        for(i=1;i<=S;i++)
        {
            for(j=S;j>=i;j--)
            {
                dp[j]=max(dp[j],dp[j-i]+s[i]);
                ans=max(ans,dp[j]);
            }    
        }
        cout<<ans;
        return 0;
    }


  • 相关阅读:
    03-django模型(1)
    Django02 Django基础知识
    jquery
    Django01 web http 基础
    Python之协程
    Python之线程
    进程 操作
    CSS
    UVALive-3268 Jamie's Contact Groups (最大流,网络流建模)
    UVA-10806 Dijkstra, Dijkstra. (最小费用流,网络流建模)
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/12353394.html
Copyright © 2011-2022 走看看