真的很气愤,这题的限制条件有严格控制,代码中体现,我都无语了
#include <stdio.h>
#include <stdlib.h>
int a[260][101],b[260][101];//第二维数组为硬币数
int main()
{
int i,j,k,l,n,sum;
int c[5]={1,5,10,25,50};
for(i=0;i<=260;i++)
for(j=0;j<=101;j++)
{
a[i][j]=0;b[i][j]=0;
}
for(i=0;i<=100;i++)//用面值为1的硬币组成价值为i(不超过100)
{
b[i][i]=1;
}
for(i=1;i<5;i++)
{
for(j=0;j<=260;j++)
{
for(k=0;j+k<=260;k+=c[i])
{
for(l=0;(l+k/c[i])<=100;l++)
a[k+j][l+k/c[i]]+=b[j][l];
}
}
for(j=0;j<=250;j++)//一定是250 否则过不了 不知道为什么
for(l=0;l<=100;++l)
{
b[j][l]=a[j][l];
a[j][l]=0;
}
}
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=0;i<=100;i++)
sum+=b[n][i];
printf("%d\n",sum);
}
return 0;
}