本文主要是介绍Day44| 518 零钱兑换 II 377 组合总和 Ⅳ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
518 零钱兑换 II
377 组合总和 Ⅳ
518 零钱兑换 II
class Solution {
public:int change(int amount, vector<int>& coins) {//1 dp数组代表j时能凑成j的方法vector<int> dp(amount + 10, 0);//2 初始化//注意本题我们凑成amount = 0的方式是1种就是只取0或一个元素都不取dp[0] = 1;for(int i = 0; i < coins.size(); i++){for(int j = coins[i]; j <= amount; j++){//j 代表背包容量,dp[j] 是取最大值//dp[j] 代表我们什么都不取//dp[j - coins[i]] + dp[j] 表示我们去了coins[i]就要减去dp[j] = max(dp[j], dp[j - coins[i]] + dp[j]);}}return dp[amount];}
};
377 组合总和 Ⅳ
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {//1 dp数组:容量为j是由几种凑成j的方法数vector<int> dp(target+2, 0);//2 初始化,把第一个数默认成1,其他默认成0就好。dp[0] = 1;//3 遍历nums.size()for(int i = 0; i <= target; i++){//背包for(int j = 0; j < nums.size(); j++){//物品//如果当前背包的容量比物品大,且if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {dp[i] += dp[i - nums[j]];}}}return dp[target];}
};
这篇关于Day44| 518 零钱兑换 II 377 组合总和 Ⅳ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!