您的位置:首页 > 其它

uva 357 - Let Me Count The Ways

2013-08-08 16:06 225 查看
昨天太着急 没注意数据的范围直接用dp数组直接用int 了 今天想了一下 应该用long long

#include <cstdio>
#include <cstring>

int coin[5]= {1,5,10,25,50};
long long dp[5][30010];
long long dfs(int cur,int sum)
{
if(sum==0)
return  dp[cur][sum]=1;
if(dp[cur][sum]!=-1)
return dp[cur][sum];
dp[cur][sum]=0;
for(int i=cur; i<5; i++)
{
if(sum>=coin[i])
dp[cur][sum]+=dfs(i,sum-coin[i]);
}
return dp[cur][sum];
}
int main()
{
memset(dp, -1, sizeof(dp));
int n;
while(scanf("%d",&n)==1)
{
dfs(0,n);
if(dp[0]
==1)
printf("There is only 1 way to produce %d cents change.\n",n);
else
printf("There are %lld ways to produce %d cents change.\n",dp[0]
,n);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: