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

上海网站建设推广百度网址入口

上海网站建设推广,百度网址入口,站长之家工具查询,wordpress礼物说主题文章目录前言一、一和零(力扣474)二、完全背包前言 1、一和零 2、完全背包理论基础 一、一和零(力扣474) 求装满这个背包最多有多少个物品 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…

文章目录

  • 前言
  • 一、一和零(力扣474)
  • 二、完全背包


前言

1、一和零
2、完全背包理论基础


一、一和零(力扣474)

求装满这个背包最多有多少个物品
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
在这里插入图片描述

背包容量是二维的 m个0 n个1 限制
思路:
动规五部曲
1、确定dp[]数组以及下标含义
dp[i][j]:i个0 j个1 最多装了dp[i][j]个物品

2、确定递推公式
dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1。

dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。

然后我们在遍历的过程中,取dp[i][j]的最大值。

所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);

对比下01背包的递推公式:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

对比一下就会发现,字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i])。

这就是一个典型的01背包! 只不过物品的重量有了两个维度而已。

3、dp数组如何初始化

01背包的dp数组初始化为0就可以。
4、确定遍历顺序
外层for循环遍历物品,内层for循环遍历背包容量且从后向前遍历

5、举例推导dp数组
以输入:[“10”,“0001”,“111001”,“1”,“0”],m = 3,n = 3为例
最后dp数组的状态如下所示:
在这里插入图片描述

class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m+1][n+1];int oneNum;int zeroNum;for(int x = 0; x<strs.length; x++){oneNum = 0;zeroNum = 0;for(char ch : strs[x].toCharArray()){if( ch == '0'){zeroNum++;}else oneNum++;}for(int i=m;i>=zeroNum;i--){for(int j=n;j>=oneNum;j--){dp[i][j] = Math.max(dp[i][j],dp[i-zeroNum][j-oneNum]+1);}}}return dp[m][n];}
}

在这里插入图片描述

二、完全背包

完全背包和01背包的区别所在: 物品在完全背包中可以使用无数次。

而在01背包一维dp数组中,倒序遍历背包容量就是为了保证每个物品只取一次,那么如何能让这个物品无限次使用呢?改为正序遍历

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

遍历顺序:
两层for循环可以相互颠倒
遍历物品在外层循环,遍历背包容量在内层循环(按行),状态如图:
在这里插入图片描述

for (int i = 0; i < weight.length; i++){ // 遍历物品for (int j = weight[i]; j <= bagWeight; j++){ // 遍历背包容量dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);}}

遍历背包容量在外层循环,遍历物品在内层循环(按列),状态如图:
在这里插入图片描述

for (int i = 1; i <= bagWeight; i++){ // 遍历背包容量for (int j = 0; j < weight.length; j++){ // 遍历物品if (i - weight[j] >= 0){dp[i] = Math.max(dp[i], dp[i - weight[j]] + value[j]);}}

完整代码:

//先遍历物品,再遍历背包
private static void testCompletePack(){int[] weight = {1, 3, 4};int[] value = {15, 20, 30};int bagWeight = 4;int[] dp = new int[bagWeight + 1];for (int i = 0; i < weight.length; i++){ // 遍历物品for (int j = weight[i]; j <= bagWeight; j++){ // 遍历背包容量dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);}}for (int maxValue : dp){System.out.println(maxValue + "   ");}
}

http://www.mnyf.cn/news/40109.html

相关文章:

  • 宁波网站建设培训网络营销是做什么的工作
  • 陕西省住房与城乡建设厅网站河南网站网络营销推广
  • 凡科网上传网站百度开户渠道商哪里找
  • 网站上qq未启用建立一个国外的网站
  • 上海家装10强名单seo关键词怎么选择
  • 网站建设和维护要学多久口碑营销的优势
  • 乐拾seo外贸网站优化推广
  • 做网站怎么切片今日新闻国内大事件
  • 上海电商网站建设公司排名搜索引擎排名2021
  • 美国做调查的网站网页百度网盘
  • 高端网站建设的介绍seo对网店推广的作用
  • 如何做返利网站杭州seo联盟
  • 怎么把网站整站下载镇江网站建设方案
  • javaee可以做网站么东营seo整站优化
  • 做网站时怎么裁切存图aso推广方案
  • 模块化网站开发广东seo排名
  • 做网站必须要购买域名百度推广登录入口电脑
  • 独立站工具网站综合查询工具
  • 玩具 东莞网站建设 技术支持seo排名的公司
  • 网站安全检测软件策划网络营销活动
  • 网站后台模板html5百度竞价排名又叫什么
  • 珠海网站开发推广类软文案例
  • 做网站难学吗shopify seo
  • 网站维护内容2345浏览器下载
  • 帝国cms如何做电影网站网站设计公司怎么样
  • wordpress the_category id新站seo外包
  • 建站快车凡科网络营销型网站
  • 如何提高网站开发效率全网推广怎么做
  • 国内做的好看的网站设计哪个网站做推广效果好
  • 如何做销售直播网站十大广告联盟