牛牛的超市

题目描述
牛牛最近在家闲的无聊,所以决定在家开一个小超市,为了方便卖东西,牛牛发明了一种用来兑换东西的新型货币,牛牛给这种新型货币起了个名字叫牛币,现在牛牛有n(n<=50)种不同的币值,其中币值为 value(value<=50) 的有 w(w<=20) 个,现在牛妹来到牛牛的超市买东西,牛妹有 x(x<=100) 元牛币,但是牛妹想将 x 元牛币换成若干零钱,请问有多少种换钱的

示例1
输入
2,10,[[1, 5],[ 2, 4]]
输出
2
说明
10元可以由 2张1元的和4张2元的组成,也可以由4张1元的和3张2元的组成

    int solve(int n, int x, vector<vector<int> >& a) {
        // write code here
        	int dp[50][101];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < x + 1; j++)
			dp[i][j] = 0;
	//dp第一列表示组成钱数为0的方法数,明显为1种.
	for (int i = 0; i < n; i++)
		dp[i][0] = 1;
	//dp第一行表示只能使用a[0][0]的货币情况下,组成钱的方法数.
	for (int j = 1; a[0][0] * j <= x && j <= a[0][1]; j++)
		dp[0][a[0][0] * j] = 1;
	int sum = 0;
	//钱数j,dp[i][j]为不用到用了k张的货币的方法的总数.
	//完全不用a[i][0]货币,只使用a[0...i-1][0]的货币时,方法数为dp[i-1][j]
	//使用k张a[i][0]货币,剩下的钱用a[0...i-1][0]的货币时,方法数为dp[i-1][j-k*a[i][0]]
	for (int i = 1; i < n; i++)
		for (int j = 1; j <= x; j++)
		{
			sum = 0;
			for (int k = 0; ((j - a[i][0] * k) >= 0) && (k <= a[i][1]); k++)
			{
				sum += dp[i - 1][j - a[i][0] * k];
			}
			dp[i][j] = sum;
		}
        return dp[n-1][x];
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值