xiongnanbin 2009-04-01 22:24:00
点我顶贴
收藏
删除
此题我交了好几次,第六组老师错了,不知道是测试数据有误还本人的代码有误,请看看,谢谢:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long s[1001],f[1001],n,ans;
long find_max(long x,long y)
{
if (x>y) return x;
else return y;
}
long jisuan(long x)
{
long sum,t;
sum=1;
for (t=2;t<x;t++)
if (x%t==0)
sum+=t;
return sum;
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) s[i]=jisuan(i);
s[1]=0;
memset(f,0,sizeof(f));
for (int i=1;i<=n;i++)
for (int j=0;j<=n-i;j++)
f[i+j]=find_max(f[i+j],f[j]+s[i]);
ans=0;
for (int i=1;i<n;i++) ans=find_max(ans,f[i]);
printf("%d\n",ans);
system("pause");
return 0;
}