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

极速建站系统金华网站建设

极速建站系统,金华网站建设,网站小视频怎么做的,工业设计展板目录 1. 前置文章2. 题目3. 小结 1. 前置文章 本文前置文章: 【动态规划】详解 0-1背包问题【动态规划】详解完全背包问题【动态规划】详解分组背包问题【动态规划】详解多重背包问题 下面是三种背包模式的区别: 0 - 1 背包 是说:有 n 个…

目录

  • 1. 前置文章
  • 2. 题目
  • 3. 小结

1. 前置文章

本文前置文章:

  • 【动态规划】详解 0-1背包问题
  • 【动态规划】详解完全背包问题
  • 【动态规划】详解分组背包问题
  • 【动态规划】详解多重背包问题

下面是三种背包模式的区别:

  • 0 - 1 背包 是说:有 n 个物品和一个重量为 t 的背包,这 n 个物品中第 i 个物品的重量为 w[i],价值为 v[i],那么这个背包能装下的物品最大价值是多少,注意一个物品只能选一次。
  • 完全背包 是说:有 n 个物品和一个重量为 t 的背包,这 n 个物品中第 i 个物品的重量为 w[i],价值为 v[i],那么这个背包能装下的物品最大价值是多少,注意一个物品可以选无数次。
  • 分组背包 是说:有 n 组物品和一个重量为 t 的背包,每个物品都有自己的体积,价值和组号,代表这个物品属于哪一组,要求在不超过背包容量的前提下,从每组物品中最多选择一个物品,使得背包中物品的总价值最大。
  • 多重背包 是说:有 n 个物品和一个重量为 t 的背包,这 n 个物品中第 i 个物品的重量为 w[i],价值为 v[i],数量为 c[i],那么这个背包能装下的物品最大价值是多少,注意一个物品可以选择的次数限制为 c[i]。

2. 题目

因为混合背包其实就是一道题中包括了 0-1 背包,完全背包,多重背包,这里直接看一道题:

  • coins

这道题目意思是:题目输入 n, m,并且给出了这 n 个硬币的价值和个数,问通过这些硬币能够构成 [1,m] 这个价值范围里面的哪些价值。

举个例子:假设 m = 5,现在给了两种硬币,硬币1 价值 1 个数2,硬币2 价值 4 个数 1,问 [1,5] 这个范围里面有多少个价值能够被这些硬币凑出来。

  • 首先 1 肯定是可以的,因为价值为1 的硬币有 2 个
  • 同理 2 也是可以的
  • 3 不可以,因为硬币1 和 硬币2 凑不出来价值 3
  • 4 可以,只需要一个硬币2 就行了
  • 5 也可以,只需要一个硬币2 和一个硬币 1

所以最终答案就是 5。

这道题就是混合背包的题目了,同样外层遍历物品,内层遍历背包。

  • 物品个数为 1,就是 0-1 背包了。
  • 物品个数 * 价值 > m,就说明此时这些物品总价值已经超过了上限 m,是完全背包模板。
  • 物品个数 * 价值 <= m,就按多重背包来算。
import java.util.Arrays;
import java.util.Scanner;public class Main {public static int MAXN = 101;public static int MAXM = 100001;public static int[] v = new int[MAXN];public static int[] c = new int[MAXN];public static boolean[] dp = new boolean[MAXM];public static int n, m = 0;public static void main(String[] args) {Scanner scan = new Scanner(System.in);while (scan.hasNext()) {n = scan.nextInt();m = scan.nextInt();if (n != 0 || m != 0) {for (int i = 1; i <= n; i++) {v[i] = scan.nextInt();}for (int i = 1; i <= n; i++) {c[i] = scan.nextInt();}}System.out.println(compute());}}/*** 有 n 个硬币, 给了出 n 个硬币的价值和个数, 价值相当于重量了* 再给一个数字 m,求 [1, m] 这个区间内有多少是能够被这些硬币拼凑出来** @return*/public static int compute() {// 每次求之前都初始化一下Arrays.fill(dp, false);dp[0] = true;for (int i = 1; i <= n; i++) {if (c[i] == 1) {// 物品只有一个,01 背包for (int j = m; j >= v[i]; j--) {if (dp[j - v[i]]) {dp[j] = true;}}} else if (v[i] * c[i] > m) {// 完全背包for (int j = v[i]; j <= m; j++) {if (dp[j - v[i]]) {dp[j] = true;}}} else {// 多重背包: v[i] * c[i] < m// 因为这里我们需要标记 dp 里面 1~m 哪个是 true,所以单调队列就用一个变量表示 true 的个数就行了for (int mod = 0; mod <= Math.min(m, v[i] - 1); mod++) {int trueCount = 0;int count = 1;for (int j = m - mod; j >= 0 && count <= c[i]; j -= v[i], count++) {trueCount += dp[j] ? 1 : 0;}for (int j = m - mod, last = j - c[i] * v[i]; j >= 0; j -= v[i], last -= v[i]) {if (last >= 0) {trueCount += dp[last] ? 1 : 0;}if (dp[j]) {// 如果已经是 true 了,那么相当于直接删除单调队列里面的过期元素trueCount--;} else {if(trueCount > 0){dp[j] = true;}}}}}}int ans = 0;for (int i = 1; i < dp.length; i++) {if (dp[i]) {ans++;}}return ans;}}

上面计算多重背包的时候用了 trueCount 代替单调队列,因为我们不需要记录最大值,只需要记录当前 dp[j] 能不能变成 true,只要依赖的几个有一个为 true 那么 dp[j] 就能变成 true。

当然如果 dp[j] 已经是 true 了,那么 j 继续往前遍历,这种情况下 j 下标的值就过期了,所以需要 trueCount--


3. 小结

这道题就是混合背包,里面涉及到了 0-1 背包,完全背包,多重背包的流程,还是一样,参考视频:算法讲解075【必备】背包dp-多重背包、混合背包。





如有错误,欢迎指出!!!


文章转载自:

http://aMU8ZeY5.gbnns.cn
http://yLnLU7gh.gbnns.cn
http://MQjHwBAQ.gbnns.cn
http://nyUvCUxc.gbnns.cn
http://GBe959qx.gbnns.cn
http://lnoTETE2.gbnns.cn
http://X7Gt8GWo.gbnns.cn
http://9JG5dfZx.gbnns.cn
http://p6vjLCMf.gbnns.cn
http://KDBhMwk1.gbnns.cn
http://auAW3WM6.gbnns.cn
http://Duneojo2.gbnns.cn
http://3uG7YL3y.gbnns.cn
http://OPSy4lx1.gbnns.cn
http://o6jjvHI2.gbnns.cn
http://VUmAhIxS.gbnns.cn
http://Yd6Ki94H.gbnns.cn
http://XvoAsqjg.gbnns.cn
http://XHKfFkqV.gbnns.cn
http://Wx3ZPbxs.gbnns.cn
http://tBqzDW8x.gbnns.cn
http://53Kc7Sq6.gbnns.cn
http://npXJCepA.gbnns.cn
http://DmVeMYQa.gbnns.cn
http://UgiGEMWb.gbnns.cn
http://fKl6De0O.gbnns.cn
http://1nnUCzW1.gbnns.cn
http://pxGjqSnz.gbnns.cn
http://3F9UGuqq.gbnns.cn
http://eOnL7qzj.gbnns.cn
http://www.dtcms.com/wzjs/764162.html

相关文章:

  • 做我的世界缩略图的网站行业网站开发方案
  • 极品wordpress素材教程网站百度无广告搜索引擎
  • 网站开发的两种模式wordpress带前端积分系统主题
  • 昆明网站建设工作室wordpress 机械模板
  • 网站的加盟代理网站推广宜选刺盾云下拉
  • 房屋在线设计网站个人做同城网站赚钱吗
  • 做led灯网站有哪些呢wordpress主题安装怎么更换内容
  • 网站站点查询西安建设工程信息网网上招投标业务平台
  • 拼多多分销模式重庆网站优化服务
  • 设计网站名字北京通信管理局网站备案处
  • 做类似淘宝的网站wordpress 数据库 插件
  • 北京网站推广价格win7iis配置网站
  • 河间网站制作网页升级访问升级
  • 网站服务器数据库互动平台游戏
  • 婚纱摄影网站设计模板雄县哪做网站
  • 网站ico图标怎么做欢迎访问中国建设银行官网
  • 网站会员系统wordpress深圳网站模板
  • 免备案空间网站二级单位网站建设
  • 北京做企业网站网站怎么加关键词做优化
  • 一个主体如何添加网站绍兴公司注册
  • 电影网站做流量软件开发公司需要什么条件
  • 赣州做建材的网站青柠视频免费观看高清视频
  • 微信公众号做的网站模板建站多少钱
  • 著名品牌展厅设计免费检测网站seo
  • 购物网站建设过程资讯网站模板
  • 如何做网站实现收入稳定投票小程序制作
  • 网站导流应该怎么做网站备案 网站
  • 网站建设贰金手指下拉壹玖佛山电脑培训班哪里有
  • 长沙这边网站建设网站要流量有什么用
  • 网站开发需解决什么问题电子书网站模板