惊回头
#include<iostream> #include<math.h> using namespace std; int a[1001],s[1001],n,maxs=0; int ys(int x) {int i,s=0; for(i=1;i<x;i++) if(x%i==0)s+=i; return s; } void work() {int i; for(i=2;i<=n;i++) s[i]=ys(i); } void dp() {memset(a,0,sizeof(a)); int i,j; for(i=2;i<=n;i++) for(j=0;j<=n-i;j++) a[i+j]=max(a[i+j],a[j]+s[i]); for(i=1;i<=n;i++) if(a[i]>maxs)maxs=a[i]; } int main(){ cin>>n; work(); dp(); cout<<maxs; return 0; }