地址
https://leetcode-cn.com/problems/coin-change/submissions/
描述
思想
代码
class Solution {
public:
//本题可以看出是完全背包问题,那怎么向我们熟悉的完全背包模型进行转化呢
//可以将amount看为背包的体积m,将coin的面额看为单个物品的体积,将物品的价值看为1
//因此本题实质上试求装满背包后,背包装载的最小价值是多少
int coinChange(vector<int>& coins, int m) {
//f[i][j] 表示从前i种硬币中选,且总体积恰好为j的所得到的最小价值。
//1e8表示没法凑成m
vector<int> f(m+1,1e8);
//背包体积为0时,最小价值为0
f[0]=0;
for(int i=0;i<coins.size();i++){
int v=coins[i];
for(int j=v;j<=m;j++){
f[j]=min(f[j],f[j-v]+1);
}
}
if(f[m]==1e8) return -1;
else return f[m];
}
};
地址
https://leetcode-cn.com/problems/coin-change-2/
描述
思想
代码
class Solution {
public:
int change(int m, vector<int>& coins) {
vector<int>f(m+1);
f[0]=1;
for(int i=0;i<coins.size();i++){
int v=coins[i];
for(int j=v;j<=m;j++){
f[j]+=f[j-v];
}
}
return f[m];
}
};