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 }

    (加油)

  • 相关阅读:
    Python笔记220151023
    B/S和C/S【转载Jane的博客 http://blog.sina.com.cn/liaojane】
    Java Queue
    Java 使用 .this与.new
    Java多态继承与清理
    Java 匿名类
    Java 内部类2
    java 中的多重继承
    Java 内部类
    Java 异常(自定义异常)
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10331678.html
Copyright © 2011-2022 走看看