二维背包求助,
#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];
int ys(int a){
int ans;
for(int i=1;i<a;i++){
if(a%i==0){
ans=ans+i;
}
}
return ans;
}
int main(){
int s;cin>>s;
int zl[s+1],jz[s+1];
for(int i=1;i<=s;i++){
if(i==1){
jz[i]=0;
zl[i]=1;
}else{
jz[i]=ys(i);
zl[i]=i;
}
//cout<<"价值:"<<jz[i];
//cout<<"重量:"<<zl[i]<<endl;
}
for(int i=1;i<=s;i++){
for(int j=1;j<=s;j++){
if(j>=zl[i]){
a[i][j]=max(a[i-1][j-zl[i]]+jz[i],a[i-1][j]);
}else a[i][j]=a[i-1][j];
}
}
cout<<a[s][s];
return 0;
}