Coin Change
原题链接https://vjudge.net/contest/348156#problem/E
现在我们有五种钱,要计算我们使用这五种钱币有多少种凑成所给金额的方法,完全背包,从第一种开始计算,将每种组成全部累加起来,
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
long long dp[7500][6];
long long v[5]= {1,5,10,25,50};//种类
void all()
{
long long i,j,z;
for(i=1; i<7500; i++)
{
for(j=1; j<5; j++)
{
dp[i][j]=dp[i][j-1];
if(i>=v[j])
{
dp[i][j]+=dp[i-v[j]][j];//当前的加上 不加当前的种类
}
}
}
}
int main()
{
memset(dp,0,sizeof(dp));
long long i,j;
for(i=0; i<5; i++)
{
dp[0][i]=1;
}
for(i=1; i<7500; i++)
{
dp[i][0]=1;//每个数初始都为1
}
all();
long long n;
while(~scanf("%lld",&n))
{
printf("%lld\n",dp[n][4]);
}
return 0;
}