zoukankan      html  css  js  c++  java
  • 【洛谷】【动态规划/01背包】P1734 最大约数和

    【题目描述:】

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

    【输入格式:】

    输入一个正整数S。

    【输出格式:】

    输出最大的约数之和。


    [算法分析:]

    01背包,每个数的约数和为其价值,数的大小为其花费

    注意1的价值应该为0


    [Code:]

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int n, v[1001], f[1001];
    
    int work(int x) {
    	if(x == 1) return 0;
    	int l = x/2, ret = 1;
    	for(int i=2; i<=l; ++i)
    		if(x % i == 0) ret += i;
    	return ret;
    }
    
    int main() {
    	cin >> n;
    	for(int i=1; i<=n; ++i) v[i] = work(i);
    	for(int i=1; i<=n; ++i)
    		for(int j=n; j>=i; --j)
    			f[j] = max(f[j], f[j-i]+v[i]);
    	cout << f[n];
    }
    
  • 相关阅读:
    053(四十四)
    053(四十三)
    053(四十二)
    053(四十一)
    053(四十)
    053(三十九)
    053(三十八)
    053(三十七)
    053(三十六)
    【leetcode❤python】231. Power of Two
  • 原文地址:https://www.cnblogs.com/devilk-sjj/p/9209358.html
Copyright © 2011-2022 走看看