Coin Change 背包

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;
}
发布了130 篇原创文章 · 获赞 3 · 访问量 1634

猜你喜欢

转载自blog.csdn.net/yeyuluo/article/details/103713539