01.题目及链接

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

02.分组背包说明

分组背包:有k组物品,N个物品,一个容量是C的背包。每组物品有若干个,同一组内的物品最多只能选一个。

状态转移方程

定义状态: dp[k][j] 最大承重为j,有前k组物品可选时的最大价值

for (int k = 1; k <= groupNum; k++) {// 所属组kfor (int j = 0; j <= capacity; j++) {// 容量jfor (int i = 0; i < I; i++) {// 所属分组k的物品Idp[k][j]=Math.max(dp[k - 1][j],dp[k - 1][j - 物品i的重量] + 物品i的价值);}}
}

状态转移方程压缩

定义状态:dp[j] 最大容量为j的前提下,物品的最大价值

for (int k = 1; k <= groupNum; k++) {// 所属组kfor (int j = capacity; j >= 0; j--) {// 容量jfor (int i = 0; i < I; i++) {// 所属分组k的物品Idp[j]=Math.max(dp[j], dp[j-data[i][0]]+data[i][1]);}}
}

03.解题思路

题意分析:小 C 通过某些途径得知了其他 s 名玩家即将使用的策略,他想知道他应该使用什么策略来最大化自己的总分==>小C的调兵策略只有一个,不能动态改变调兵策略

算法执行流程

  1. 分别对按座城堡对每一个玩家派去的士兵数量升序排序
  2. 状态定义:分组的组是城堡的个数(假设为k),定义状态dp[i]:表示士兵人数为i时小 C 总分的最大值
  3. 状态转移:dp[j]=Math.max(dp[j], dp[j-2*(第i个人派去第k座城堡的数量)-1]+k*i);

04.具体代码

 public static void main(String[] args) throws IOException {BufferedReader in=new BufferedReader(new InputStreamReader(System.in));String[] tmps=in.readLine().split(" ");// s名玩家        n座城堡(组)      玩家有 m名士兵(容量)int s=Integer.valueOf(tmps[0]),n=Integer.valueOf(tmps[1]),m=Integer.valueOf(tmps[2]);int[][] data=new int[s+1][n+1];for (int i = 1; i <= s; i++) {tmps=in.readLine().split(" ");for (int j = 1; j <= n; j++) {data[i][j]=Integer.valueOf(tmps[j-1]);}}//数组按列进行排序(从小到大排序)for (int j = 1; j <= n; j++) {int[] tmp=new int[s+1]; for (int i = 1; i <= s; i++) {tmp[i]=data[i][j];}Arrays.sort(tmp);for (int i = 1; i <= s; i++) {data[i][j]=tmp[i];}}int[] dp=new int[m+1];for (int k = 1; k <= n; k++) {for (int j = m; j >= 1; j--) {for (int i = 1; i <= s; i++) {if(j>=2*data[i][k]+1) dp[j]=Math.max(dp[j], dp[j-2*data[i][k]-1]+k*i);}}}System.out.println(dp[m]);in.close();}

05.更多背包学习

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

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

  1. 洛谷P5322 [BJOI2019] 排兵布阵 题解

    洛谷P5322 [BJOI2019] 排兵布阵 题解 题意:小 C 正在玩一款排兵布阵的游戏.在游戏中有 n n n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m m m 名士兵,可以向第 ...

  2. 洛谷 P5322 [BJOI2019]排兵布阵

    P5322 [BJOI2019]排兵布阵 题目大意:玩游戏~~,对于 n 个城堡,有 m 个士兵可以分别派遣到这些城堡. 同时我们有 s 个对手,在每个城堡都会与每个玩家单独比拼,在第 i 个城堡与每 ...

  3. 洛谷P5322 [BJOI2019]排兵布阵【分组背包】

    题目描述 小 C 正在玩一款排兵布阵的游戏.在游戏中有 n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m 名士兵,可以向第 i 座城堡派遣 a_i名士兵去争夺这个城堡,使得总士兵数不超过 ...

  4. 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵

    洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...

  5. [BJOI2019] 排兵布阵(分组背包)

    [BJOI2019] 排兵布阵 题目描述 小 C 正在玩一款排兵布阵的游戏.在游戏中有 nnn 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 mmm 名士兵,可以向第 iii 座城堡派遣 ai ...

  6. P5322 [BJOI2019] 排兵布阵

    P5322 [BJOI2019] 排兵布阵 Summary: Description 小 C 正在排兵布阵.有 n n n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m m m 名士兵,可 ...

  7. P5322 BJOI2019 排兵布阵

    P5322 BJOI2019 排兵布阵 本题主要考察对模型的转化能力. 首先要察觉两条性质: 对于一个城堡,想打败一个玩家的同时用最少的士兵,肯定是正好派出这个玩家在这个城堡派出的士兵数量的二倍加一名 ...

  8. [BJOI2019]排兵布阵

    排兵布阵 题解 今天比赛上这道题好像是人均题呀. 好吧,就一个简单的,连优化都不需要的背包dp. 我们每次只需要处理在比第i个城堡的第j大的玩家大的情况,不必把所有的兵的情况都处理完. 然后就可以过了 ...

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

    01.题目及链接 题目链接:https://www.luogu.com.cn/problem/P6771 02.多重背包状态转移方程说明 了解多重背包 有 N 种物品和一个容量是 V 的背包,每种物品 ...

最新文章

  1. python函数赋值函数_python 函数参数赋值过程
  2. python意外缩进引发逻辑错误_如何编写 Python 程序
  3. 同步代码和异步代码_告别异步代码
  4. 学习资料(不定更新)
  5. SIP与RTP综合应用5-RTP解包过程
  6. java导入导出有版本兼容问题_java导入excel时遇到的版本问题
  7. poj 3841 Double Queue (AVL树入门)
  8. 饮冰三年-人工智能-Python-11之HelloWorld
  9. ubuntu nsight使用
  10. caffe安装+Ubuntu16.04+三显卡gpu加速
  11. 快速原型制造_快速原型初学者指南
  12. 哲学家就餐问题-中断解决
  13. 2022牛客多校J题 Serval and Essay
  14. excel单元格斜线_最实用的8个Excel操作技巧,1分钟学会!
  15. 离散数学与计算机专业的关系是什么,离散数学跟计算机专业有什么关系?
  16. iPhone 12 pro max卡槽怎么插双卡
  17. 【Java基础】使用swing对话框编写一个程序:输入长和宽,计算矩形的周长和面积
  18. ASP 3.0高级编程(一)
  19. 05_大数据技术之Spark内核解析(1.1)
  20. mysql物理读 逻辑读百分比_监控程序MYSQL - 子木清风 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

热门文章

  1. mock多次调用返回不同结果
  2. 引用和指针傻傻分不清
  3. 1.10 Xcode左侧界面介绍二 [原创iOS开发-Xcode教程]
  4. Android 打开webView黑屏闪烁问题排查
  5. 怎么将图片旋转45度?
  6. 消考网的优质服务让我更加盼望
  7. Lodop打印控件在平台中的应用
  8. arduino编程语言_Arduino编程语言
  9. 下载 Microsoft SQL Server JDBC 驱动程序
  10. 单片机毕业设计 stm32指纹识别考勤系统 - 嵌入式 物联网