zoukankan      html  css  js  c++  java
  • P1734 最大约数和

    题目描述

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

    输入格式

    输入一个正整数S。

    输出格式

    输出最大的约数之和。

    输入输出样例

    输入 #1
    11
    输出 #1
    9

    说明/提示

    样例说明

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

    数据规模

    S<=1000


    思路:01背包。
    将一个数字本身当作体积,约数和当作价值。就是个01背包
    #include <iostream>
    #include<bitset>
    #include<string>
    using namespace std;
    const int maxn= 200005;
    long long f[maxn];
    long long a[maxn];
    int main()
    {
        int s;
        cin >> s;
        a[1]=0;
        for(int i=2;i<=s;i++)
        {
            long long ans=1;
            for(int j=2;j<=i/j;j++)
            {
               if(i%j==0)
               {
                   ans+=j;
                   if(j*j!=i)
                    ans+=i/j;
               }
            }
            a[i]=ans;
        }
        /*for(int i=1;i<=s;i++)
            cout << a[i] << endl;*/
        for(int i=1;i<=s;i++)
        {
            for(int j=s;j>=i;j--)
            {
                f[j]=max(f[j],f[j-i]+a[i]);
            }
        }
        cout << f[s] << endl;
        return 0;
    }
  • 相关阅读:
    中间件面试总结
    1.angular js 学习网址
    摄影构图
    mybatis学习(四)
    mybatis学习(三)
    mybatis学习(二)
    mybatis 学习(一)
    mysql 使用过程中出现问题
    springboot
    java 关键字
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11708501.html
Copyright © 2011-2022 走看看