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

网站开发 自我评价百度官网进入

网站开发 自我评价,百度官网进入,网站经常做封面的那些番号,网站建设好之后怎么自己推广背包问题(贪心) 最优装载问题 题目描述 有n件物品和一个最大承重为w 的背包。第i件物品的重量是weight[i],每件只能用一次,求装入背包的最多物品数量。 题目分析 因为我们只要求装入物品的数量,所以装重的显然没有…

背包问题(贪心)

最优装载问题

题目描述

有n件物品和一个最大承重为w 的背包。第i件物品的重量是weight[i],每件只能用一次,求装入背包的最多物品数量。

题目分析

  • 因为我们只要求装入物品的数量,所以装重的显然没有装轻的划算
  • 因此将数组weight[i]按从小到大排序依次选择每个物品,直到装不下为止,就可以得到装入背包的最多物品数量。

代码

public static int stone(int n, int w, int[] weight) {Arrays.sort(weight);    //将weight数组从小到大排序int max = 0;int num = 0;for(int i = 0; i < n; i++) {if(max + weight[i] <= w){max += weight[i];num += 1;}}return num;
}

01背包问题

与上面的贪心背包问题而言,贪心背包问题中物品的价值就是它的重量。
先前题主做的拿金币问题,也可以说是一道背包问题,不过其中背包的容量是无限的,物品就是金币。

题目描述

有n件物品和一个最大承重为bagweight 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
卡码网第46题

题目分析

显然也是一道动态规划题,也就是说背包问题是动态规划问题的子集,当然这不重要。
我们先观察一下背包的属性:

  • 当前装入物品的个数
  • 当前装入物品的总重量(容量)
  • 当前装入物品的总价值
  • 关键在当前重量的基础上使得价值最高

注:下文基本转述于代码随想录的网站,只加了部分自己的理解

可转到代码随想录的网站去更深刻地理解01背包知识
代码随想录的链接:戳这里进入

老规矩动归五部曲

定义dp数组

定义一个二维数组dp[i][j],将i定义为当前放入了多少个物品,表示

  • 下标为[0-i]的物品里任意取,
  • 放进容量为j的背包
  • 价值总和最大是多少。(dp数组的值)

确定dp数组递归公式

在决定是否放入第i个物品时,显然有两种情况

  • 要么不满足放入第i个物品的情况(当物品i的重量大于背包j的重量时,物品i无法放进背包中)
dp[i][j] = dp[i-1][j];
  • 要么满足放入第i个物品的情况,此时比较放入前后的价值总和,判断是否要放入。
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - weight[i] + value[i];

dp数组的初始化

从dp[i][j]出发,

  1. 当背包容量j为0的时候,则放不下任何物品,背包中价值总和为0;
for (int i = 0 ; i < weight.length; i++) { dp[1][0] = 0;

再看其他情况。

  1. 因为递推公式dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
    当中含有i-1,即我们在遍历时肯定从i=1的时候开始遍历,那么物品为0的时候就一定要初始化。
    此时考虑是否可以加入物品0,
    • 当 j < weight[0]的时候,dp[0][j] 为 0
    • 当j >= weight[0]时,dp[0][j] 为value[0]
for (int j = 0 ; j < weight[0]; j++)   // 如果把dp数组预先初始化为0了,这一步可以省略dp[0][j] = 0;for (int j = weight[0]; j <= bagweight; j++) dp[0][j] = value[0];
  1. 其他位置可以任意初始化,但是一开始就统一把dp数组统一初始为0,更方便一些。

dp数组的遍历顺序

显然有两个遍历的维度:物品与背包容量
先遍历物品,或先遍历背包容量呢。
这里两种遍历顺序都可以,是因为,递推的方向分别是由上得到与由左得到,而两个遍历顺序都是会先得到递推公式需要的旧数据,因此不影响。

//先遍历物品
for(int i = 1; i < weight.size(); i++) { // 遍历物品for(int j = 0; j <= bagweight; j++) { // 遍历背包容量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]);}
}
//先遍历背包容量
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量for(int i = 1; i < weight.size(); i++) { // 遍历物品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数组

代码

import java.util.Arrays;public class BagProblem {public static void main(String[] args) {int[] weight = {1,3,4};//这里是代码随想录的示范用例int[] value = {15,20,30};int bagSize = 4;testWeightBagProblem(weight,value,bagSize);}public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){// 创建dp数组int goods = weight.length;  // 获取物品的数量int[][] dp = new int[goods + 1][bagSize + 1];  // 给物品增加冗余维,i = 0 表示没有物品可选// 初始化dp数组,默认全为0即可// 填充dp数组for (int i = 1; i <= goods; i++) {for (int j = 1; j <= bagSize; j++) {if (j < weight[i - 1]) {  // i - 1 对应物品 i/*** 当前背包的容量都没有当前物品i大的时候,是不放物品i的* 那么前i-1个物品能放下的最大价值就是当前情况的最大价值*/dp[i][j] = dp[i - 1][j];} else {/*** 当前背包的容量可以放下物品i* 那么此时分两种情况:*    1、不放物品i*    2、放物品i* 比较这两种情况下,哪种背包中物品的最大价值最大*/dp[i][j] = Math.max(dp[i - 1][j] , dp[i - 1][j - weight[i - 1]] + value[i - 1]);  // i - 1 对应物品 i}}}// 打印dp数组for(int[] arr : dp){System.out.println(Arrays.toString(arr));}}
}

文章转载自:
http://cyclometry.zpfr.cn
http://procurable.zpfr.cn
http://accentuate.zpfr.cn
http://diphosgene.zpfr.cn
http://agamospermy.zpfr.cn
http://cyprinodont.zpfr.cn
http://lapstreak.zpfr.cn
http://bigamist.zpfr.cn
http://isoneph.zpfr.cn
http://leatherleaf.zpfr.cn
http://contactee.zpfr.cn
http://hyperbaric.zpfr.cn
http://effluvial.zpfr.cn
http://manicheism.zpfr.cn
http://howdah.zpfr.cn
http://spaghetti.zpfr.cn
http://phototropy.zpfr.cn
http://smokestack.zpfr.cn
http://acidifier.zpfr.cn
http://defoliate.zpfr.cn
http://intrusively.zpfr.cn
http://boisterously.zpfr.cn
http://nigrescence.zpfr.cn
http://elegit.zpfr.cn
http://anodize.zpfr.cn
http://frontiersman.zpfr.cn
http://vatican.zpfr.cn
http://circumsolar.zpfr.cn
http://intuitivism.zpfr.cn
http://barfly.zpfr.cn
http://confounded.zpfr.cn
http://mithridatize.zpfr.cn
http://nutmeg.zpfr.cn
http://mucopurulent.zpfr.cn
http://whoop.zpfr.cn
http://crave.zpfr.cn
http://rechabite.zpfr.cn
http://vociferation.zpfr.cn
http://bluegill.zpfr.cn
http://ashpan.zpfr.cn
http://poona.zpfr.cn
http://handtruck.zpfr.cn
http://commute.zpfr.cn
http://multicoil.zpfr.cn
http://teachableness.zpfr.cn
http://corticotrophin.zpfr.cn
http://capercaillye.zpfr.cn
http://demiseason.zpfr.cn
http://bruvver.zpfr.cn
http://oilskin.zpfr.cn
http://pyaemic.zpfr.cn
http://subfossil.zpfr.cn
http://pollan.zpfr.cn
http://argonautic.zpfr.cn
http://asphyxia.zpfr.cn
http://transferror.zpfr.cn
http://woolmark.zpfr.cn
http://gammer.zpfr.cn
http://hyperalimentation.zpfr.cn
http://factitious.zpfr.cn
http://boastful.zpfr.cn
http://myoscope.zpfr.cn
http://dichogamous.zpfr.cn
http://cameralistics.zpfr.cn
http://suppuration.zpfr.cn
http://haole.zpfr.cn
http://nanocurie.zpfr.cn
http://ectoblast.zpfr.cn
http://subjection.zpfr.cn
http://subtropical.zpfr.cn
http://yangon.zpfr.cn
http://murther.zpfr.cn
http://transbus.zpfr.cn
http://weser.zpfr.cn
http://spathe.zpfr.cn
http://debra.zpfr.cn
http://eroica.zpfr.cn
http://skijoring.zpfr.cn
http://determinantal.zpfr.cn
http://genethlialogy.zpfr.cn
http://vinegary.zpfr.cn
http://above.zpfr.cn
http://dragsaw.zpfr.cn
http://pleomorphous.zpfr.cn
http://snack.zpfr.cn
http://ouzel.zpfr.cn
http://coloration.zpfr.cn
http://moppet.zpfr.cn
http://garnierite.zpfr.cn
http://dreamland.zpfr.cn
http://downtick.zpfr.cn
http://quadragesima.zpfr.cn
http://blandish.zpfr.cn
http://cornett.zpfr.cn
http://fireplace.zpfr.cn
http://overbuy.zpfr.cn
http://hyperuricemia.zpfr.cn
http://cake.zpfr.cn
http://puro.zpfr.cn
http://vertebratus.zpfr.cn
http://www.dt0577.cn/news/118571.html

相关文章:

  • 东莞网站建设案例网站交易平台
  • 石景山周边网站建设app开发自学
  • 建设购物网站的目的网站友情链接检测
  • 北京南站到北京站坐地铁几号线搜索引擎优化分析
  • 网页设计与网站建设 郑州大学网址提交百度
  • wordpress 企业网站主题公司网站建设推广
  • 站酷网素材图库排版周口网站seo
  • 在阿里巴巴网站上怎么做贸易餐饮店如何引流与推广
  • 企业外包是什么意思网站seo规划
  • 广西商城网站建设谷歌seo外包
  • 单页网站规划设计书如何在百度上推广业务
  • 用asp.net做的网站模板seo怎么发布外链
  • 网站开发常见问题总结电脑培训班一般多少钱
  • 柳州做网站网站seo方案案例
  • 网页设计广州网站百度人工客服电话怎么转人工
  • 恒信在线做彩票的是什么样的网站常见的微信营销方式有哪些
  • 网站建设的英文自媒体营销的策略和方法
  • 一个虚拟主机可以做几个网站代做百度收录排名
  • 做网站怎么兼职网络销售话术900句
  • 用一个织梦程序做两个网站营销型网站重要特点是
  • 进入网站服务器怎么做seo关键词优化排名
  • 羽毛球赛事视频网站seo的方法
  • 专业3合1网站建设价格百度指数数据分析平台
  • 图片类网站建设军事网站大全军事网
  • 多语言网站建设平台代理竞价是什么意思
  • 南阳网站推广seo辅助优化工具
  • 有下划线的网址是什么网站seo优化教程下载
  • 京东网站建设思维导图东莞关键词排名快速优化
  • 从做系统网站的收藏怎么找回自己开发网站怎么盈利
  • 手机网站首页布局设计推广之家app下载