当前位置: 首页 > news >正文

西湖南昌网站建设公司互联网推广引流公司

西湖南昌网站建设公司,互联网推广引流公司,大连建设网交费查询,阿里巴巴网站装修所用代码 java 完全背包 01背包物品只能使用一次 – 倒序遍历 for(i 0; i < weight.length; i){ 物品for (j bagWeight; j > weight[i]; j--){ 背包dp[j] max(dp[j], dp[j-weight[i]] value[i])} }完全背包物品可以使用无限次 – 正序遍历 for(i 0; i < weigh…

所用代码 java

完全背包

01背包物品只能使用一次 – 倒序遍历

for(i = 0; i < weight.length; i++){ 物品for (j = bagWeight; j >= weight[i]; j--){ 背包dp[j] = max(dp[j], dp[j-weight[i]] + value[i])}
}

完全背包物品可以使用无限次 – 正序遍历

for(i = 0; i < weight.length; i++){ 物品for (j = weight[i]; j <= bagWeight; j++){ 背包dp[j] = max(dp[j], dp[j-weight[i]] + value[i])}
}

完全背包for循环中可以颠倒,先遍历谁都可以

零钱兑换 II LeetCode 518

题目链接:零钱兑换 II LeetCode 518 - 中等

思路

  • dp[j]:装满背包j的情况有dp[j]种

  • 递推公式:dp[j] += dp[j-coins[i]]

  • 初始化:dp[0] = 1 如果等于0,后面累加就会一直是0, 空集也是一种方法

    • dp[1] += dp[0],1要从0得到结果然后继续累加
  • 遍历方向:coins[i] <= j <= amount

  • 打印dp

class Solution {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]];
//                System.out.print("\tdp[j] = " + dp[j]);}
//            System.out.println();}return dp[amount];}
}

总结

先遍历物品,后遍历背包,保证了物品是从1、2、3开始的,不会有重复,也就是说这是一个组合数

若先遍历背包,再遍历物品,每次物品都是从1开始,就会有重复数,如1,2 2,1 但是这可以代表排列数

组合总和 Ⅳ leetCode 377

题目链接:组合总和 Ⅳ leetCode 377 - 中等

思路

  • dp[j] :和为j的情况有dp[j]种
  • 递推:dp[j] += dp[j-nums[i]]
  • 初始化:dp[0] = 1
  • 遍历顺序:先背包,后物品
class Solution {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]) dp[j] += dp[j-nums[i]];System.out.print("\tdp[j] = " +dp[j]);}System.out.println();}return dp[target];}
}

总结

背包为0可以装下物品 1 2 3 这其实是一个悖论,也可以认为是背包为0的可以装下无限大的东西。但是我认为把这个看成一个初始化无意义的值就行了,以防止出现后序累加的值一直为0。

dp数组的打印值

        dp[j] = 1   dp[j] = 1   dp[j] = 1dp[j] = 1   dp[j] = 1   dp[j] = 1dp[j] = 1   dp[j] = 2   dp[j] = 2dp[j] = 2   dp[j] = 3   dp[j] = 4dp[j] = 4   dp[j] = 6   dp[j] = 7

若是觉得这值确实没必要,我们其实可以从j=1开始遍历,所打印的值就有助于对于dp数组的理解。

        dp[j] = 1   dp[j] = 1   dp[j] = 1dp[j] = 1   dp[j] = 2   dp[j] = 2dp[j] = 2   dp[j] = 3   dp[j] = 4dp[j] = 4   dp[j] = 6   dp[j] = 7

所以,通过这两个题,我们可以明白:

  • 先遍历物品,再遍历背包:组合问题 - 无重复
  • 先遍历背包,再遍历物品:排列数 - 有重复(可排序)
http://www.mmbaike.com/news/65947.html

相关文章:

  • 青岛网站建设方案书关键词seo深圳
  • 广州网站建站提高工作效率的重要性
  • 做php网站需要什么软件seo程序专员
  • 大型网站seo北京疫情最新数据
  • 网站设计欣赏导航seo优化网站教程
  • 医疗图片做网站图片营销策划公司经营范围
  • 财务网站建设手机版谷歌浏览器入口
  • 简单oa网站建设方案手游推广平台有哪些
  • 我的世界做弊端网站广告设计
  • 国家骨干院校建设网站网站推广如何收费
  • 临海手机网站软件排名工具
  • 网站前台模板怎么替换nba实力榜最新排名
  • 建设部网站技术负责人业绩表大型网站建设方案
  • 做宣传语的网站优化大师下载安装免费
  • 能自己做二次元人物的网站怎样做平台推广
  • 福州 网站备案淘宝推广公司
  • 浙江网站建设模板网站谷歌搜索引擎seo
  • 制作销售网站有哪些黄冈网站推广策略
  • 开发web网站开发单个药品营销策划方案
  • 四川政府采购网招标信息网详细描述如何进行搜索引擎的优化
  • 负责公司网站建设的岗位叫什么it培训学校it培训机构
  • 域名seo查询seo是怎么优化上去
  • 学校网站设计理念网络推广网站有哪些
  • 四川省建设资格注册中心网站百度指数的数据来源
  • wordpress怎样设置友情链接淘宝标题优化工具推荐
  • 广东新闻联播主持人生哥seo博客
  • 邯郸网站优化怎么用平台推广文案
  • 中建八局第三建设有限公司网站北京seo运营
  • 免费网站建设浩森宇特月饼营销软文
  • 四川成都网站网页设计怎样进行网络营销吸引顾客