完全背包理论基础

完全背包与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. 组合总和 Ⅳ相关推荐

  1. 【leetcode题解——动态规划之完全背包】518.零钱兑换II(python版本详解+表格+dp五部曲)

    518. 零钱兑换 II 重点: 本题求组合数,而非排列数. 例如示例: 5 = 2 + 2 + 1 5 = 2 + 1 + 2 这是一种组合,都是 2 2 1,而(2,2,1)(2,1,2)为两种排 ...

  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.排列问题 ...

  3. leetocde 518 零钱兑换II

    前言 题目:518. 零钱兑换 II 参考:完全背包问题-大草.零钱兑换 II-力扣官方题解 提交代码 我可以理解01背包的滚动数组,但是我理解不了完全背包的滚动数组. 理解不了,便用二维数组.虽然二 ...

  4. 518. 零钱兑换 II golang动态规划

    518. 零钱兑换 II 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, coins = [1, ...

  5. 【必备算法】动态规划:LeetCode题(六)322. 零钱兑换,518. 零钱兑换 II

    322. 零钱兑换² 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: ...

  6. java刷题--518零钱兑换II

    java刷题--518零钱兑换II 题目 代码 结果 题目 代码 class Solution {public int change(int amount, int[] coins) {int[] d ...

  7. leetcode:518. 零钱兑换 II

    518 零钱兑换 II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/coin-change-2/ 给你一个整数数组 coins 表示不同面额的硬币 ...

  8. LeetCode 518. 零钱兑换 II(动态规划)

    1. 题目 给定不同面额的硬币和一个总金额. 写出函数来计算可以凑成总金额的硬币组合数. 假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, coins = [1, 2, 5] ...

  9. 98. Leetcode 518. 零钱兑换 II (动态规划-完全背包)

    完全背包: 如果求组合数: 外层for遍历循环物品,内层for遍历循环背包容量 如果求排列数: 外层for遍历循环背包容量, 内层for遍历循环物品 步骤一.确定状态: 确定dp数组及下标含义 这里的 ...

最新文章

  1. CentOS6.5下做DNS服务器
  2. 关于vue项目中输入框无法正常输入的问题
  3. 宗馥莉:艰难的接班人与幸运的创二代
  4. 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
  5. 史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...
  6. 自己初学时的随笔记录
  7. Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析
  8. c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
  9. 最近摸了下DELL 几种老设备的一点心得
  10. hidden symbol `pthread_atfork'
  11. ACM学习历程—HDU5396 Expression(递推 计数)
  12. android自定义控件动态,GitHub - itrenjunhua/WaveView: Android自定义控件实现动态百分比水波纹效果...
  13. 网络数据传输过程分析
  14. 布衣联盟装机常用软件光盘——金鼠报春版
  15. java redis 抽奖_GitHub - zenmin/luckdraw: 年会抽奖程序 Java开发 可内定中奖人员 一键导入员工 使用简单...
  16. Dreamweaver CC 2019中文版
  17. javascript有效的anagram挑战
  18. mailgun_使用Mailgun API简化应用程序中的电子邮件
  19. 大数据安全相关概念(上)
  20. 货币金融学-期末复习

热门文章

  1. mysql pager cat_有趣的mysql pager命令
  2. clistctrl获取列高 mfc_VC MFC列表视图(CListCtrl)控件
  3. 电线电缆、电线、网线等的表示方法(规格、型号)电线规格电线网 yjv 电线电缆规格型号表(四)...
  4. 超好用的一些三方库及开发相关拓展链接整理(不断更新ing)
  5. unity中使用fmod音频插件3
  6. Django request的相关用法
  7. 了解OpenCart中的地理区域和税收
  8. 2022年危险化学品生产单位安全生产管理人员考试试题及在线模拟考试
  9. 【备战校招】阅文集团Java实习生笔试题
  10. 如何选择稳定性更高的升降桌