P5322 [BJOI2019]排兵布阵

题目大意:玩游戏~~,对于 n 个城堡,有 m 个士兵可以分别派遣到这些城堡。 同时我们有 s 个对手,在每个城堡都会与每个玩家单独比拼,在第 i 个城堡与每个玩家比拼,胜利一次得 i 分。在对敌策略唯一的情况下求得分最大值。(胜利条件为我方人数严格大于对方人数的两倍,即大于等于 2×\times×n+1)

算法思路:分组背包

想法:
1、由于 s 和 n 的范围较小,应尽量围绕他们进行处理。

2、对于每个城堡,可把与每一个玩家对战的最优解设为01背包的一个物品,其花费就是这个最优解 2×\times×n+1,其价值就是在花费为最优解情况下与所有玩家对战的得分。

3、现在对于每一个城堡"背包"我们就有了 s 个物品,又因为策略唯一,所以就可以进行分组背包。

#include<bits/stdc++.h>using namespace std;const int N=1e2+10;
const int M=2*1e4+10;int s,n,v,a[N][N],f[M];vector<int> c[N],w[N];int total(int ni,int num){int retu=0;for(int i=1;i<=s;i++){if(a[ni][i]<=num) retu+=ni;}return retu;
}int main(){scanf("%d%d%d",&s,&n,&v);for(int i=1;i<=s;i++){   //注意循环顺序和 a[j][i]for(int j=1;j<=n;j++){scanf("%d",&a[j][i]);a[j][i]=a[j][i]*2+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=s;j++){int sum=total(i,a[i][j]);c[i].push_back(a[i][j]);w[i].push_back(sum);}}for(int i=1;i<=n;i++){for(int j=v;j>=0;j--){for(int p=0;p<c[i].size();p++){if(c[i][p]<=j) f[j]=max(f[j],f[j-c[i][p]]+w[i][p]);}}}cout<<f[v];return 0;
}

运用排序的简化代码,但时间稍慢,亲测少十几毫秒 (其实没差) 。

#include<bits/stdc++.h>using namespace std;const int N=1e2+10;
const int M=2*1e4+10;int s,n,v,a[N][N],f[M];vector<int> c[N],w[N];int main(){scanf("%d%d%d",&s,&n,&v);for(int i=1;i<=s;i++){for(int j=1;j<=n;j++){scanf("%d",&a[j][i]);a[j][i]=a[j][i]*2+1;}}for(int i=1;i<=n;i++) sort(a[i]+1,a[i]+s+1);for(int i=1;i<=n;i++){for(int j=v;j>=0;j--){for(int p=1;p<=s;p++){if(a[i][p]>j) break; f[j]=max(f[j],f[j-a[i][p]]+i*p);}}}cout<<f[v];return 0;
}

PS:作为一名蒟蒻,对于八方神犇的合理建议都是感激不尽的儿~~

洛谷 P5322 [BJOI2019]排兵布阵相关推荐

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

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

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

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

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

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

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

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

  5. P5322 [BJOI2019] 排兵布阵

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

  6. P5322 BJOI2019 排兵布阵

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

  7. P5322 [BJOI2019]排兵布阵

    失踪人口回归{\color{Lavender}失踪人口回归}失踪人口回归 目录 好康的代码 思路 ... 好康的代码 #include<bits/stdc++.h> using names ...

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

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

  9. [BJOI2019]排兵布阵

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

最新文章

  1. 运用供应链管理实现更快速、更高质量的交付
  2. NRPE实现对其它(远端)设备的监控
  3. 班级日常 | 一天一瞬间!
  4. 项目中的集中开发模型研究
  5. Git学习文档之一 学习文档-并行开发
  6. 硬核干货! 你的业务是否适合上链、上链有那些坑?dfuse、慢雾、MYKEY大佬为你为你指点迷津……...
  7. mysql特有语法_MySQL 独有SQL语法汇总(一)
  8. [转载]Qt之获取本机网络信息
  9. spring的新注解
  10. c语言题库-礼炮声响次数,c语言题库与答案精华版资料.doc
  11. python实现ks算法_Python计算KS值并绘制KS曲线
  12. ⅰsee是什么意思_see是什么意思
  13. 学计算机怎么介绍自己的产品,商品基本描述
  14. android 取消蓝牙配对框 实现自动配对,android 取消蓝牙配对框 实现自动配对
  15. jupyter不是内部或外部命令,也不是可运行程序的解决方案
  16. [HR规划]人力资源规划详解(zt)
  17. 微软推送win11 22622.575补丁!
  18. 华为主题 主题兑换券活动高端操作
  19. WebLogic-ONS configuration failed ONS 配置失败
  20. 微信小程序毕业设计 基于微信汽车维修保养小程序系统开题报告

热门文章

  1. SVA16.14并发断言翻译笔记$inferred_clock和$inferred_disable(六)
  2. 【C语言】BC90小乐乐算多少人被请家长(DAY 5)
  3. 图解Topo拓扑排序
  4. python画图如何调整图例位置_python图例参数
  5. Go在迅雷P2P连通系统中的性能优化实践-朱文
  6. 如何设置Sketch快捷键,Sketch提升效率的常用技巧
  7. 微信小程序 iOS tableview
  8. linux安装frps服务,Debian手动搭建frps服务端
  9. dojo学习日记(6)——dojo/_base/fx的 fadeOut()方法
  10. htmlcss,Hbuilder入门小项目——我的淘宝,相似