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

扬州网站建设icp备网站开发项目视频

扬州网站建设icp备,网站开发项目视频,云霄城乡建设局网站,德州公司做网站什么是01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]#xff0c;得到的价值是value[i] 。每件物品只能用一次#xff0c;求解将哪些物品装入背包里物品价值总和最大。 01背包的模板 二维dp数组 dp数组的含义 dp[i][j]含义下标为【0-i】之间…什么是01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]得到的价值是value[i] 。每件物品只能用一次求解将哪些物品装入背包里物品价值总和最大。 01背包的模板 二维dp数组 dp数组的含义 dp[i][j]含义下标为【0-i】之间的物品任取放进容量为j的背包里的最大价值 递推公式 dp[i][j]的值取决于放不放物品i 如果不放物品idp[i][j]为dp[i-1][j] 如果放物品idp[i-1][j-w[i]] 保证可以放入物品i0-i-1的物品不放入i时的最大价值 dp[i][j] 为dp[i-1][j-w[i]]v[i] dp[i][j] 求两者最大值 递推公式 dp[i][j]max(dp[i-1][j],dp[i-1][j-w[i]]w[i]) 初始化 第一行和第一列均初始化 for (int j 0 ; j weight[0]; j) { dp[0][j] 0; } // 正序遍历 for (int j weight[0]; j bagweight; j) {dp[0][j] value[0]; }遍历 有两个遍历维度 物品和背包 两个遍历顺序 正序遍历和倒序遍历 先遍历 物品还是先遍历背包重量呢 其实都可以 但是先遍历物品更好理解。 for(int i 1; i weight.size(); i) { // 遍历物品for(int j 0; j bagweight; j) { // 遍历背包容量//如果整体的背包容量小于物品重量 dp[i][j] dp[i - 1][j];//前i-1个物品能放下的最大价值就是当前情况的最大价值if (j weight[i]) dp[i][j] dp[i - 1][j];else dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]);} }一维dp数组 在使用二维数组的时候递推公式dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]); 我们发现可以把dp[i]的值覆盖到dp[i-1]上 这样可以实现一维数组 如果把dp[i - 1]那一层拷贝到dp[i]上表达式完全可以是 dp[i][j] max(dp[i][j], dp[i][j - weight[i]] value[i]); 与其把dp[i - 1]这一层拷贝到dp[i]上不如只用一个一维数组了只用dp[j]一维数组也可以理解是一个滚动数组 一维dp数组的动规五部曲分析 dp数组的含义 dp[j] 容量为j的背包的最大价值 递推公式 dp[j] max(dp[j],dp[j-w[j]]v[j]) dp[j] 表示不放物品j即拷贝上一层 初始化 初始化 dp[0]0; 非0下标初始化为0 遍历顺序 for(int i 0; i weight.size(); i) { // 遍历物品for(int j bagWeight; j weight[i]; j--) { // 遍历背包容量dp[j] max(dp[j], dp[j - weight[i]] value[i]);} }为什么是倒序遍历 正序遍历的话 会依托前面的dp[j] 正向遍历前面的dp[j]会被覆盖 之后再使用时 不是上一层的dp[j] 而是当前层新更新的dp[j] 这个dp[j]可能已经加入过物品i 这就导致i被重复添加 倒序遍历时 前面的dp[j]还没有被覆盖 public static void main(String[] args) {int[] weight {1, 3, 4};int[] value {15, 20, 30};int bagWight 4;testWeightBagProblem(weight, value, bagWight);}public static void testWeightBagProblem(int[] weight, int[] value, int bagWeight){int wLen weight.length;//定义dp数组dp[j]表示背包容量为j时能获得的最大价值int[] dp new int[bagWeight 1];//遍历顺序先遍历物品再遍历背包容量for (int i 0; i wLen; i){for (int j bagWeight; j weight[i]; j--){dp[j] Math.max(dp[j], dp[j - weight[i]] value[i]);}}//打印dp数组for (int j 0; j bagWeight; j){System.out.print(dp[j] );}}416. 分割等和子集 题目链接416. 分割等和子集 解题思路数组的数字是物品其重量和价值都是该数字。背包的容量是总和的一半。如果物品价值可以达到容量 则说明可以被分割 代码如下 class Solution {public boolean canPartition(int[] nums) {//求背包容量int sum0;for(int i0;inums.length;i){sumnums[i];}if(sum%2!0){return false;}int capation sum/2;int[] dp new int[capation1];for(int i0;inums.length;i) {for(int jcapation;jnums[i];j--){dp[j]Math.max(dp[j],dp[j-nums[i]]nums[i]);}}if(dp[capation]capation){return true;}else{return false;}} }
http://www.hkea.cn/news/14315695/

相关文章:

  • 功能主机网站想创业去哪里找项目
  • 长春网站建设首选网诚传媒_设计师联盟
  • 文化网站建设心得wordpress固定链接优化
  • 营销型的网站域名做网站 负责 域名备案
  • 虹口专业做网站注册资金可以乱写吗
  • 网站建设jwzcq网站建设相关优化
  • 深圳网站建设的服务怎么样如何做网站答题领红包链接
  • 淘客做网站怎么备案iis怎么添加网站
  • 免费h5制作网站重庆奉节网站建设公司
  • pc网站怎么做适配WordPress标签加HTML
  • WordPress怎么建小站外贸小语种网站建设
  • 找做网站页的在哪找wordpress seo plugin
  • 五级偏黄视频网站建设如何制作个人网页二维码
  • 在百度怎样建网站重庆 网站 建设
  • 甘肃省住房城乡建设厅网站首页wordpress diy插件
  • 页面模板只能选择已发表的内容百度seo快速提升排名
  • 长沙网站建设 599增城住房和城乡建设局网站
  • 上海网站建设企业排名网站页面设计内容
  • 广阳网站制作网址外链平台
  • 数据库 搭建 网站网络与智能媒体设计 干什么?
  • 上海网站制作网站建设网红营销模式
  • 网站怎么php做微信登录合肥推广优化公司
  • seo排名优化培训网站可以控制网络的软件
  • 广告网站怎么设计制作设计相关网站
  • 顺庆区城乡规划建设局门户网站wap游戏天下网游
  • wordpress 总站模板娄底网站优化
  • 百度网站是用什么软件做的形容网站做的好
  • 深圳积分商城网站设计网站正能量晚上在线观看
  • 有了网站源码怎么做网站获取网站缩略图的asp代码
  • wordpress做视频网站海口手机网站建设