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

    题目描述

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

    输入输出格式

    输入格式:

    输入一个正整数S。

    输出格式:

    输出最大的约数之和。

    输入输出样例

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

    说明

    样例说明

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

    数据规模

    S<=1000



    ----------------------------------------------------

    先算出小于等于0的所有数的约数和
    然后
    就可以转换为01背包问题

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int v[1010],f[1010];
     5 int n;
     6 
     7 int num(int a)
     8 {
     9     if(a == 1)
    10         return 0;
    11     int ans = 1,temp=a;
    12     for(int j=2; j<a; j++)
    13         if(temp % j == 0)
    14             ans+=j;
    15     return ans;
    16 }
    17 
    18 int main()
    19 {
    20     scanf("%d",&n);
    21     for(int i=1; i<=n; i++)
    22     {
    23         v[i]=num(i);
    24     }
    25     //实质为01背包问题 
    26     for(int i=1; i<=n; i++)  //每个数都试一边 
    27         for(int j=n; j>=i; j--)
    28             f[j]=max(f[j],f[j-i]+v[i]);  
    29     printf("%d",f[n]);
    30     return 0;
    31 }

    (加油)

  • 相关阅读:
    Android变化如何破解几场金
    mysql 在创建批处理脚本日志表信息
    近期感悟要多说多想多做
    Spring使用小结2
    structs2使用小结2
    2013第50周五打包
    2013第50周四开发记
    jquery使用总结
    2013第50周三开发记
    eclipse编辑工具小结
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10331678.html
Copyright © 2011-2022 走看看