Day 44 | 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ
完全背包理论基础
完全背包与01背包的区别在于:完全背包同一物品可装多次,而01背包每个物品只能装一次。
因此遍历容量时,从前向后遍历即可!
关于遍历顺序,也与01背包有差别,01背包一维数组只能先遍历物品,而完全背包问题先遍历哪个都可以。
518. 零钱兑换
完全背包解题思路:
每一种面额的硬币有无限个——完全背包问题。
可将问题转换为,从[0,i]中选硬币,每种硬币有无限个,硬币的和为j,共有dp[j]种组合。
初始化dp[0]=1;
因为是求有多少种方法(和一和零题类似),因此
状态转移方程:dp[j]=dp[j]+dp[j-nums[i]];
完全背包问题,从前向后遍历容量。
组合问题,外层遍历物品,内层遍历背包容量。
public int change(int amount, int[] coins) {int[] dp=new int[amount+1];dp[0]=1;for(int i=0;i<coins.length;i++){for(int j=coins[i];j<=amount;j++){dp[j]+=dp[j-coins[i]];}}return dp[amount];}
377. 组合总和 Ⅳ
本题与上一题的区别在于:本题求排列,上一题求组合。
组合问题:先遍历物品,再遍历容量。
排列问题:先遍历容量,再遍历物品。
本题可转化为:从[0,i]中选数,和为j,共有target[j]种方法。
状态转移方程与上题相同:dp[j]=dp[j]+dp[j-nums[i]];
遍历时记得加上判断条件j-nums[i]>=0,防止下标越界。
public int combinationSum4(int[] nums, int target) {int[] dp=new int[target+1];dp[0]=1;for(int j=0;j<=target;j++){for(int i=0;i<nums.length;i++){if(j-nums[i]>=0){dp[j]+=dp[j-nums[i]];}}}return dp[target];}
Day 44 | 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ相关推荐
- 【leetcode题解——动态规划之完全背包】518.零钱兑换II(python版本详解+表格+dp五部曲)
518. 零钱兑换 II 重点: 本题求组合数,而非排列数. 例如示例: 5 = 2 + 2 + 1 5 = 2 + 1 + 2 这是一种组合,都是 2 2 1,而(2,2,1)(2,1,2)为两种排 ...
- 代码随想录44——动态规划:完全背包理论基础、518零钱兑换II、377组合总和IV
文章目录 1.完全背包理论基础 2.518零钱兑换II 2.1.题目 2.2.解答 3.377组合总和IV 3.1.题目 3.2.解答 4.组合和排列问题的便利顺序 4.1.组合问题 4.2.排列问题 ...
- leetocde 518 零钱兑换II
前言 题目:518. 零钱兑换 II 参考:完全背包问题-大草.零钱兑换 II-力扣官方题解 提交代码 我可以理解01背包的滚动数组,但是我理解不了完全背包的滚动数组. 理解不了,便用二维数组.虽然二 ...
- 518. 零钱兑换 II golang动态规划
518. 零钱兑换 II 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, coins = [1, ...
- 【必备算法】动态规划:LeetCode题(六)322. 零钱兑换,518. 零钱兑换 II
322. 零钱兑换² 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: ...
- java刷题--518零钱兑换II
java刷题--518零钱兑换II 题目 代码 结果 题目 代码 class Solution {public int change(int amount, int[] coins) {int[] d ...
- leetcode:518. 零钱兑换 II
518 零钱兑换 II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/coin-change-2/ 给你一个整数数组 coins 表示不同面额的硬币 ...
- LeetCode 518. 零钱兑换 II(动态规划)
1. 题目 给定不同面额的硬币和一个总金额. 写出函数来计算可以凑成总金额的硬币组合数. 假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, coins = [1, 2, 5] ...
- 98. Leetcode 518. 零钱兑换 II (动态规划-完全背包)
完全背包: 如果求组合数: 外层for遍历循环物品,内层for遍历循环背包容量 如果求排列数: 外层for遍历循环背包容量, 内层for遍历循环物品 步骤一.确定状态: 确定dp数组及下标含义 这里的 ...
最新文章
- CentOS6.5下做DNS服务器
- 关于vue项目中输入框无法正常输入的问题
- 宗馥莉:艰难的接班人与幸运的创二代
- 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
- 史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...
- 自己初学时的随笔记录
- Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析
- c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
- 最近摸了下DELL 几种老设备的一点心得
- hidden symbol `pthread_atfork'
- ACM学习历程—HDU5396 Expression(递推 计数)
- android自定义控件动态,GitHub - itrenjunhua/WaveView: Android自定义控件实现动态百分比水波纹效果...
- 网络数据传输过程分析
- 布衣联盟装机常用软件光盘——金鼠报春版
- java redis 抽奖_GitHub - zenmin/luckdraw: 年会抽奖程序 Java开发 可内定中奖人员 一键导入员工 使用简单...
- Dreamweaver CC 2019中文版
- javascript有效的anagram挑战
- mailgun_使用Mailgun API简化应用程序中的电子邮件
- 大数据安全相关概念(上)
- 货币金融学-期末复习
热门文章
- mysql pager cat_有趣的mysql pager命令
- clistctrl获取列高 mfc_VC MFC列表视图(CListCtrl)控件
- 电线电缆、电线、网线等的表示方法(规格、型号)电线规格电线网 yjv 电线电缆规格型号表(四)...
- 超好用的一些三方库及开发相关拓展链接整理(不断更新ing)
- unity中使用fmod音频插件3
- Django request的相关用法
- 了解OpenCart中的地理区域和税收
- 2022年危险化学品生产单位安全生产管理人员考试试题及在线模拟考试
- 【备战校招】阅文集团Java实习生笔试题
- 如何选择稳定性更高的升降桌