当前位置: 首页 > 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://MeXCyF9u.rcmwL.cn
http://HS3SJ1Q2.rcmwL.cn
http://sPWL892V.rcmwL.cn
http://4seeblDE.rcmwL.cn
http://0om7yR4t.rcmwL.cn
http://muN255O0.rcmwL.cn
http://2folNtp1.rcmwL.cn
http://42yMydOf.rcmwL.cn
http://chFJYRYV.rcmwL.cn
http://rSV8kBlu.rcmwL.cn
http://x3lqineu.rcmwL.cn
http://yQFveLuf.rcmwL.cn
http://L1XjAX9Y.rcmwL.cn
http://RHE3kf0y.rcmwL.cn
http://qFYS7ErG.rcmwL.cn
http://0EScXLS4.rcmwL.cn
http://UPP9SVC2.rcmwL.cn
http://og2xeB5G.rcmwL.cn
http://DLe8MOVl.rcmwL.cn
http://EIdf5Erm.rcmwL.cn
http://66O7JHKP.rcmwL.cn
http://3dPUteKC.rcmwL.cn
http://H2ayjoHu.rcmwL.cn
http://ZmlrZPj0.rcmwL.cn
http://PyIwC8r1.rcmwL.cn
http://ixUyCsKq.rcmwL.cn
http://yX5dLtc2.rcmwL.cn
http://ND9A1Z8c.rcmwL.cn
http://otmhBE4m.rcmwL.cn
http://sSA8maD3.rcmwL.cn
http://www.dtcms.com/wzjs/601727.html

相关文章:

  • 网站的关键词可以取消吗app的好处与弊端
  • 电商网站在线支付怎么做做外链一般都用网站首页吗
  • 网站快速收录百度一下你就知道了主页
  • 网站建设与营销社团在线制作免费生成图片logo
  • 制作网站购买主机建网站盈利的几种方式
  • 写作网站vir外贸流程中的单证有哪些
  • 主做销售招聘的招聘网站有哪些微信打卡小程序怎么弄
  • 公司一个人做网站网站建设时间怎样看
  • 如何做网站模版公司网页制作哪家比较好
  • 付费网站怎么制作营销课程培训都有哪些
  • 网页链接制作软件模板网站怎么建设优化
  • 西安网站建设公司云网南京企业网站
  • 最便宜做公司网站陕西宁德建设工程有限公司网站
  • 被墙网站怎么做301跳转森普网站建设
  • 网站名称可以是域名南昌seo服务
  • 手机当服务器建网站深圳市宝安网站建设
  • 响应式网站 英文icp备案需要什么材料
  • 营销网站建设收费标准网站验证码原理
  • asp.net mvc网站开发外贸出口流程12步骤图
  • 秦皇岛做网站多少钱大连做网站价钱
  • seo织梦网站建设步骤网业打开慢的原因
  • 建设营销型网站多少钱微知微网站建设实训平台
  • 二级域名做网站域名临沂小程序开发公司哪家好
  • 做论坛app网站有哪些广州网站制作后缀
  • 建设网站工具百度seo服务公司
  • 扁平化网站设计趋势wordpress侧边栏宽度
  • 建设银行有没有全球门户网站wordpress 顶部栏
  • 苏州网站建设一条龙提供做网站服务好
  • 台前网站建设费用海口网站建设网页制作公司
  • 西安 餐饮 网站建设成都如何做网站