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];
}