Coin Change
这题题意和UVA674很像,但加了一个限制条件不能超过100个硬币。于是我们可以用d[i][j]来表示硬币数量为i时金钱总数为j时的方法总数,总钱不能超过250。const int N=500+10;
int d[101][N],a[6]= {1,5,10,25,50};
int main()
{
int n;
d[0][0]=1;
for(int i=0; i<5; i++)
for(int j=0; j<=250; j++)
for(int k=1; k<=100; k++)
{
if(a[i]+j<=250)
d[k][j+a[i]]+=d[k-1][j];
else break;
}
while(~scanf("%d",&n))
{
int sum=0;
for(int i=0; i<=100; i++)
sum+=d[i][n];
printf("%d\n",sum);
}
return 0;
}//动态规划的核心在于构造状态转移方程。