一道非常简单的菜鸟ACM题,高手看一下!老是不能通过。。。。

来源:百度知道 编辑:UC知道 时间:2024/06/15 07:10:27
链接一下题目:http://acm.hdu.edu.cn/showproblem.php?pid=2069
#include<stdio.h>
int main()
{
int i,j,k,l,m,n;
int way;
while(scanf("%d",&n)!=EOF)
{
way=0;
if(!n)
goto end;
for(i=0;i<=n/50;i++)
{
for(j=0;j<=(n-50*i)/25;j++)
for(k=0;k<=(n-50*i-j*25)/10;k++)
for(l=0;l<=(n-50*i-j*25-k*10)/5;l++)
for(m=0;m<=n;m++)
if(n==i*50+j*25+k*10+l*5+m)
{
way++;
}
}
end: printf("%d\n",way);
}
return 0;
}
如果有空,顺便看一下这两个题吧!
http://zhidao.baidu.com/question/100543831.html

母函数

楼主试试 在网吧 手头没编译器 可能不能过
#include<iostream>
using namespace std;
int main()
{
int i,j,k,t;
int nums[251]={0},coins[5]={1,5,10,25,50};
int ans[251][101]={0},ansTemp[251][101]={0};
ans[0][0] = 1;

for(i=1;i<=5;i++)
{
for(j=0;j<=250;j++)
for(k=0;k*coins[i-1]+j<=250;k++)
for(t=0;t+k<101;t++)
ansTemp[k*coins[i-1]+j][t+k] += ans[j][t];
for(j=0;j<=250;j++)
for(t=0;t<101;t++)
{
ans[j][t] = ansTemp[j][t];
ansTemp[j][t]=0;
}
}

for(i=1;i<=250;i++)
for(j=1;j<=100;j++)
nums[i] += ans[i][j];
nums[0] = 1;
while(cin>>i)
cout<<nums[i]<<endl;
return 0;
}

题目有个条件是组成最终目标价钱的硬币个数小于等于100 你再