0
点赞
收藏
分享

微信扫一扫

leetcode - 322. 零钱兑换

leetcode - 322. 零钱兑换

题目

在这里插入图片描述

代码

#include <iostream>
#include <vector>
using namespace std;

int coinChange(vector<int>& coins, int amount) {
	if(amount == 0){
		return 0;
	}
	int n = coins.size();
	if(n == 0){
		return -1;
	}
	int Max = amount + 1; //最多由amount枚硬币组成,所以amount + 1 是无法组成的
	vector<int> dp(amount + 1, Max); 
	dp[0] = 0;
	for(int i = 1; i <= amount; i++){
		for(int j = 0; j < n; j++){
			if(coins[j] <= i){
				dp[i] = min(dp[i], dp[i - coins[j]] + 1);
			}
		}
	}
	if(dp[amount] >= Max){
		return -1;
	}else{
		return dp[amount];
	}
}

int main(){
	int n, amount, res;
	cin>>n;
	vector<int> coins(n);
	for(int i = 0; i < n; i++){
		cin>>coins[i];
	}
	cin>>amount;
	res = coinChange(coins, amount);
	cout<<res;
	return 0;
}
举报

相关推荐

0 条评论