洛谷P1734-最大约数和(模拟01背包)

简介: 洛谷P1734-最大约数和(模拟01背包)

题目描述:


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


输入格式:


输入一个正整数S。


输出格式:



输出最大的约数之和。


输入输出样例:



输入 #1复制

11

输出 #1复制

9


说明/提示:

样例说明

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

数据规模

S<=1000


AC Code:


#include<bits/stdc++.h>
using namespace std;
#define N 1010
int n,dp[N],sum[N],ans;
int main() {
  scanf("%d",&n);
  for(int i=1;i<=n/2;i++) {
    for(int j=2;i*j<=n;j++) {
      //i*j=当前数,那么i必为当前数的约数 
      sum[i*j]+=i;//sum数组记录每个数的约数和 
    }
  }
  for(int i=1;i<=n;i++) {
    for(int j=n;j>=i;j--) {//模拟01背包,每个数只能使用1次 
      dp[j]=max(dp[j],dp[j-i]+sum[i]);//减去当前数,加上它的约数和 
    }
  }
  printf("%d\n",dp[n]);
  return 0;
}

相关文章
|
4月前
|
存储
【洛谷 P1255】数楼梯 题解(递归+记忆化搜索+高精度)
这是一个使用动态规划解决的“数楼梯”问题。给定楼梯数`N`,求不同上楼方式的数量。程序通过递归函数`f()`计算,其中`f(x) = f(x - 1) + f(x - 2)`,初始条件`f(1) = 1`,`f(2) = 2`。考虑到数据规模可能很大,使用了高精度加法运算。样例输入`4`,输出`5`。代码中定义了一个存储中间结果的向量`mem`,并提供了一个用于显示高精度数的`printv()`函数。
69 0
|
5月前
多重背包和分组背包
多重背包和分组背包
蓝桥杯:最大公约数 2020省赛 例题:既约分数
蓝桥杯:最大公约数 2020省赛 例题:既约分数
61 0
多重背包例题
多重背包例题
92 0
洛谷P1679-神奇的四次方数(完全背包)
洛谷P1679-神奇的四次方数(完全背包)
洛谷P1679-神奇的四次方数(完全背包)
洛谷P1855-榨取kkksc03(二维01背包)
洛谷P1855-榨取kkksc03(二维01背包)
洛谷P1855-榨取kkksc03(二维01背包)
|
算法 Java 决策智能
【算法模板】动态规划(基础背包篇)—附习题(一)
【算法模板】动态规划(基础背包篇)—附习题(一)
【算法模板】动态规划(基础背包篇)—附习题(一)