luogu P1734 最大约数和 (01 背包)
2024-09-03 15:23:25
链接:https://www.luogu.org/problemnew/show/P1734
题面:
题目描述
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入输出格式
输入格式:
输入一个正整数S。
输出格式:
输出最大的约数之和。
输入输出样例
说明
样例说明
取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
数据规模
S<=1000
思路:
把这个数的因数和看成这个数的权值,那么就可以转化成一道01背包了,因为数据非常小,直接暴力预处理出每个数的因数和。
实现代码;
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5+;
int a[M],dp[M],n;
void init(){
for(int i = ;i <= n;i ++)
for(int j = ;j < i;j ++)
if(i%j==) a[i] += j;
} int main()
{
cin>>n;
init();
for(int i = ;i <= n;i ++){
for(int j = n;j >= i;j --){
dp[j] = max(dp[j],dp[j-i]+a[i]);
}
}
cout<<dp[n]<<endl;
}
最新文章
- Dapper where Id in的解决方案
- 局部(或全局)设置<;a>;标签的target属性
- UITableViewCell重用的问题
- linux第4天 shell socket
- 1. python中的随机函数
- centos7 学习1 KDE配置中文
- linux服务之iptables与firewalld
- 如何选择一个 Linux Tracer (2015)
- 字符串匹配之boyer-Moore算法
- pymysql安装和使用
- 2019十二省联考 Round 1 &;&; 济南市市中心游记
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
- 43-3-STM32的CAN外设
- Java语言基础问题
- JS跨浏览器的事件处理
- php---进行RSA进行非对称加密
- select 操作
- mac终端 login: login: Could not determine audit condition
- PyQt: eg2
- Oracle VM virtualBox -Centos6.4 安装后没有网解决方法