DPのfor a week

P1734最大约数和

选取和不超过 S S S 的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大
如取数字 4 4 4 6 6 6,可以得到最大值 ( 1 + 2 ) + ( 1 + 2 + 3 ) = 9 (1+2)+(1+2+3)=9 (1+2)+(1+2+3)=9

#include 
#include 
using namespace std;

int a(int x) {
   
    vector<int> a(x + 1, 0);
    for (int i = 1; i <= x; ++i) {
   
        for (int j = 2 * i; j <= x; j += i) {
   
            a[j] += i;
        }
    }
    vector<int> dp(x + 1, 0);
    for (int i = 1; i <= x; ++i) {
   
        for (int j = 1; j <= i; ++j) {
   
            dp[i] = max(dp[i], dp[i - j] + a[j]);
        }
    }
    return dp[x];
}

int main() {
   
    int x;
    cin >> x;
    cout << a(x) << endl; 
    return 0;
}

AT_arc148_b [ARC148B]
将字符串翻转,然后把所有 d 换成 p,把所有 p 换成 d。

#include
using namespace std;

int main(){
   
int n,m=-1;
string a,b,c;
	cin>>n>>a;
	for(int i=0;i<=n-1;i++){
   
		if(a[i]=='p'){
   
			m=i;
			break;
		}
	}
	if(m==

你可能感兴趣的:(算法,c++,图论)