P1734 最大约数和

P1734 最大约数和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

预处理出小于等于S的数的约数和,将一个数的值作为体积,这个数的约数和作为价值,之后01背包模板。

void solve() {
    int n; cin>>n;
    vector<array<int,2>> a(n + 1);
    for(int i = 1; i <= n; ++i) {
        int sum = 0;
        for(int j = 1; j < i; ++j) {
            if(i % j == 0) sum += j;
        }
        a[i] = {i, sum};
    }
    vector<int> f(n + 1);
    for(int i = 1; i <= n; ++i) {
        for(int j = n; j >= a[i][0]; --j) {
            f[j] = max(f[j], f[j - a[i][0]] + a[i][1]);
        }
    }
    cout<<f[n];
}

你可能感兴趣的:(算法题,算法,java,数据结构)