01.题目及链接

题目链接:https://www.luogu.com.cn/problem/P6771

02.多重背包状态转移方程说明

了解多重背包

有 N 种物品和一个容量是 V 的背包,每种物品都有n[i]可用。第 i 种物品的重量是 w[i] 、价值是 v[i]。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。

状态转移方程

定义状态dp[i]:背包两种容量分别为j的情况下,物品的最大价值

 for (int i = 1; i <= n; i++)   //有N种物品for (int j = v; j>=0; j--)    //容量vfor (int k = 1; k <= n[i]; k++)    //第i个物品的数量为n[i]if(j>=k*w[i])   dp[j]=Math.max(dp[j], dp[j-k*w[i]]+k*v[i]);

 for (int i = 1; i <= n; i++) //有N种物品for (int k = 1; k <= n[i]; k++)  //第i个物品的数量为n[i]for (int j = v; j >= w[i]; j--) //容量vdp[j]=Math.max(dp[j], dp[j-w[i]]+v[i]);

03.具体代码

解题思路:

  • 根据限制进行排序(从小到大)
  • 根据状态转移方程进行DP

DP写法1

 public static void main(String[] args) {Scanner in=new Scanner(System.in);int n=in.nextInt();int[][] input=new int[n+1][3];int maxLimit=0;//最大限制for (int i = 1; i <= n; i++) {input[i][0]=in.nextInt();//高度input[i][1]=in.nextInt();//限制input[i][2]=in.nextInt();//数量maxLimit=Math.max(maxLimit, input[i][1]);}Arrays.sort(input,(o1,o2)->o1[1]-o2[1]);//根据限制进行排序(从小到大)int max=0;int[] dp=new int[maxLimit+1]; for (int i = 1; i <= n; i++) {for (int k = 1; k <= input[i][2]; k++) {for (int j = input[i][1]; j >= input[i][0]; j--) {dp[j]=Math.max(dp[j], dp[j-input[i][0]]+input[i][0]);max=Math.max(dp[j], max);}}}System.out.println(max);}

DP写法2

 public static void main(String[] args) {Scanner in=new Scanner(System.in);int n=in.nextInt();int[][] input=new int[n+1][3];int maxLimit=0;for (int i = 1; i <= n; i++) {input[i][0]=in.nextInt();//高度input[i][1]=in.nextInt();//限制input[i][2]=in.nextInt();//数量maxLimit=Math.max(maxLimit, input[i][1]);    }Arrays.sort(input,(o1,o2)->o1[1]-o2[1]);int max=0;int[] dp=new int[maxLimit+1]; for (int i = 1; i <= n; i++) {for (int j = input[i][1]; j >= 0; j--) {for (int k = 1; k <= input[i][2]; k++) {if(j>=k*input[i][0]) {dp[j]=Math.max(dp[j], dp[j-k*input[i][0]]+k*input[i][0]);max=Math.max(dp[j], max);}}}}System.out.println(max);}

04.更多背包学习

https://blog.csdn.net/qq_46237746/article/details/123908504

Java解洛谷P6771 [USACO05MAR]Space Elevator 太空电梯,包含完整的多重背包状态转移方程,大量注释,通俗易懂相关推荐

  1. Java 解洛谷PP5322 [BJOI2019] 排兵布阵,包含完整的分组背包状态转移方法说明,通俗易懂

    01.题目及链接 题目链接:https://www.luogu.com.cn/problem/P5322 02.分组背包说明 分组背包:有k组物品,N个物品,一个容量是C的背包.每组物品有若干个,同一 ...

  2. 洛谷P6771 [USACO05MAR]Space Elevator 太空电梯

    题目描述 奶牛们要去太空了!它们打算用方块建造一座太空电梯.现在它们有 N种方块,第 i种方块有一个特定的高度 h[i]​,一定的数量 c[i]​.为了防止宇宙射线破坏方块,第 i种方块的任何部分不能 ...

  3. P6771 [USACO05MAR]Space Elevator 太空电梯-贪心与DP

    题目链接[USACO05MAR]Space Elevator 太空电梯 - 洛谷 题目描述 奶牛们要去太空了!它们打算用方块建造一座太空电梯.现在它们有 NN 种方块,第 ii 种方块有一个特定的高度 ...

  4. P6771 [USACO05MAR]Space Elevator 太空电梯 题解

    [USACO05MAR]Space Elevator 太空电梯 description: 奶牛们要去太空了!它们打算用方块建造一座太空电梯.现在它们有 种方块,第 种方块有一个特定的高度 ,一定的数量 ...

  5. c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题. 在之前的文章当中,我们一起探讨了二分.贪心.排序和搜索算法,今天我们来 ...

  6. [背包DP]Space Elevator 太空电梯

    [背包DP]Space Elevator 太空电梯 题面 题目描述 输入 输出 样例 解析 代码 题面 题目描述 奶牛们要去太空了!它们打算用方块建造一座太空电梯.现在它们有 NN 种方块,第 ii ...

  7. 【洛谷】P6771 Space Elevator 太空电梯***(多重背包)

    穿越隧道 没有理清所限制的高度之间的关系. 需要反复理解. #include <bits/stdc++.h> using namespace std; const int N = 1e3 ...

  8. Java实现洛谷 P1428 小鱼比可爱

    题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...

  9. 洛谷 P1164 小A点菜(01背包状态转移方程详细推导)

    题目链接 今天刷题,本来背包问题感觉稳稳的懒得刷了,随手做两个就被卡住了, 原来自己只会做死板的背包,这种稍微变形的就不会推状态转移方程了 我又去看了一眼滚动背包的转变方法 加上大佬的题解,才稍微明白 ...

最新文章

  1. 【FFmpeg】FFmpeg常用基本命令
  2. python——正则表达式
  3. html文档的基本类型,HTML(网页的文档类型介绍)
  4. 高通modem启动过程_苹果首次承认正自研基带芯片,高通要被抛弃了?
  5. Flash--元件和实例
  6. java生成图片url_Java Springboot如何基于图片生成下载链接
  7. STM32F103基本定时器使用
  8. LOAD-OF-PROGRAM
  9. python正则表达式 身份证_python3中6种常用正则表达式
  10. Mybatis中的collection和association一关系
  11. Java基础篇:短路逻辑运算符
  12. ads1110程序实测好用
  13. 防火墙结构之屏蔽主机体系结构
  14. 防火墙和代理服务器之间有什么区别
  15. problem: ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited with state
  16. 如何预防 XSS 攻击
  17. 手把手从0打造电商平台前端
  18. Rime默认为英文状态
  19. matlab, 生成一个数值一样的n维列向量
  20. CSGO DIY-文件修改位置

热门文章

  1. 关于Rhino中没有Moldex3d Mesh外挂的解决办法
  2. jQuery 重置页面查询条件
  3. 搭建自己的Android浏览器(一)
  4. 安装FREENAS 虚拟机
  5. oracle if中过程判断,oracle的if判断语句
  6. 基于matlab的图像HOG特征提取算法仿真
  7. 两种磁盘分区形式MBR(只支持4个主分区)和GPT
  8. 如何成为月入五万的程序员,他们告诉你!
  9. 一个字节能表示的范围及详解
  10. APK TOOL配置教程