322. Coin Change 动态规划应用
来源:互联网 发布:c语言逻辑运算真值表 编辑:程序博客网 时间:2024/04/29 22:49
You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return-1
.
Example 1:
coins = [1, 2, 5]
, amount = 11
return 3
(11 = 5 + 5 + 1)
Example 2:
coins = [2]
, amount = 3
return -1
.
Note:You may assume that you have an infinite number of each kind of coin.
分析:
典型的dp问题,以count=5,coins={1,2,5}分析。dp[i]表示第i个货币最小需要dp[i]个货币。我们从0开始,0需要0个硬币,1需要一个1元货币。dp[1]=1。2有两个方案,一个1元再加另一个一元。dp[2]=dp[1]+1=2,另一种方案是一个2元,所以dp[2]=1。dp[3]也有两种方案dp[1]+dp[2]或dp[1]+dp[1]+dp[1]。所以dp[3]=2。以此类推,在我的代码中,初始化是用INT_MAX。要注意溢出。
代码:
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
//if(amount==0) return 0;
vector<int> dp(amount+1,0);
for(int i=1;i<(amount+1);++i)
dp[i]=INT_MAX;
for(int i=1;i<(amount+1);++i)
for(int j=0;j<coins.size();++j)
{
if(i>=coins[j])
{
if((dp[i-coins[j]]+1)<0) dp[i-coins[j]]=INT_MAX-1;
dp[i]=min(dp[i],dp[i-coins[j]]+1);
}
}
return dp[amount]==INT_MAX?-1:dp[amount];
}
};
- 322. Coin Change 动态规划应用
- 动态规划——322. Coin Change
- 动态规划中级教程 322. Coin Change
- 动态规划解322. Coin Change
- [动态规划]UVA674 - Coin Change
- 【VIP】322. Coin Change 【M】【53】【动态规划】
- leetcode 322. Coin Change-硬币交换|动态规划
- uva 674 - Coin Change(动态规划)
- UVa 674 - Coin Change 动态规划入门
- uva 674 - Coin Change 动态规划
- UVA - 674 - Coin Change(动态规划)
- uva 674 coin change 动态规划
- hdoj--2069--Coin Change(动态规划)
- uva 674 Coin Change (动态规划:记忆化搜索)
- 动态规划之硬币兑换(Coin Change)
- uva 674 && hdu 2069 coin change(动态规划、母函数)
- 动态规划 139 Word Break + 322 Coin Change
- 利用动态规划(DP)解决 Coin Change 问题
- [贪心] BZOJ 3671 [Noi2014]随机数生成器
- Docker基础技术:Linux Namespace(上)
- FreeRTOS的任务管理
- 替换目标string 中的某些 string的方法。
- iOS开发网络篇—NSURLConnection基本使用
- 322. Coin Change 动态规划应用
- java实现SHA1签名加密
- 内存中堆和栈的解释
- android学习之网络连接2
- MAC Git SSH Key 生成步骤
- LCS算法&最大公共子串&最长公共子序列 PHP 实现
- 继承初始化顺序
- 构建项目Maven+SpringMVC+Spring+Mybatis
- c语言基础概念(3)