首页 > 其他 > 详细

【JZOJ】2126. 最大约数和

时间:2019-08-18 15:40:09      阅读:116      评论:0      收藏:0      [点我收藏+]

  题目大意

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

  分析

      把我们分解出来的因数进行合并,存在一个不知名的数组里,然后我们大可开始我们的迪屁!!(bag),我们可以

      把它转化成0 1背包:

      f[j]=max(f[j],f[j-1]+sum[i]);

    于是:

  code

    

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int f[1001000];
 6 int ans;
 7 int n;
 8 int sum[1001000];
 9 int main(){
10     freopen("maxsum.in","r",stdin);
11     freopen("maxsum.out","w",stdout);
12     cin>>n;
13     for(int i=1;i<=n/2;i++){
14         for(int j=i*2;j<=n;j+=i){
15             sum[j]+=i;
16         }
17     }
18     for(int i=1;i<=n;i++){
19         for(int j=n;j>=1;j--){
20             if(j>=i)
21                 f[j]=max(f[j],f[j-i]+sum[i]);
22             ans=max(ans,f[j]);
23         }
24     }
25     cout<<ans;
26 }

大水

【JZOJ】2126. 最大约数和

原文:https://www.cnblogs.com/WestJackson/p/11372310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!