[BJOI2019] 排兵布阵(分组背包)
[BJOI2019] 排兵布阵
题目描述
小 C 正在玩一款排兵布阵的游戏。在游戏中有 nnn 座城堡,每局对战由两名玩家来争夺这些城堡。每名玩家有 mmm 名士兵,可以向第 iii 座城堡派遣 aia_iai 名士兵去争夺这个城堡,使得总士兵数不超过 mmm。
如果一名玩家向第 iii 座城堡派遣的士兵数严格大于对手派遣士兵数的两倍,那么这名玩家就占领了这座城堡,获得 iii 分。
现在小 C 即将和其他 sss 名玩家两两对战,这 sss 场对决的派遣士兵方案必须相同。小 C 通过某些途径得知了其他 sss 名玩家即将使用的策略,他想知道他应该使用什么策略来最大化自己的总分。
由于答案可能不唯一,你只需要输出小 C 总分的最大值。
输入格式
输入第一行包含三个正整数 s,n,ms,n,ms,n,m,分别表示除了小 C 以外的玩家人数、城堡数和每名玩家拥有的士兵数。
接下来 sss 行,每行 nnn 个非负整数,表示一名玩家的策略,其中第 iii 个数 aia_iai 表示这名玩家向第 iii 座城堡派遣的士兵数。
输出格式
输出一行一个非负整数,表示小 C 获得的最大得分。
样例 #1
样例输入 #1
1 3 10
2 2 6
样例输出 #1
3
样例 #2
样例输入 #2
2 3 10
2 2 6
0 0 0
样例输出 #2
8
提示
样例1解释:
小 C 的最佳策略为向第 111 座城堡和第 222 座城堡各派遣 555 名士兵。
数据范围:*
对于 100%100\%100% 的数据:
1≤s≤1001\le s \le 1001≤s≤100
1≤n≤1001\le n \le 1001≤n≤100
1≤m≤200001\le m \le 200001≤m≤20000
对于每名玩家 ai≥0a_i \ge 0ai≥0,∑i=1nai≤m\sum\limits_{i=1}^n a_i \le mi=1∑nai≤m
学会了分组背包的一些细节。
对于分组背包板子。
先循环物品,体积,最后是分组决策。
for(int i=0;i<n;i++){for(int j=m;j>=0;j--){ // 要有j>=0for(int k=0;k<s[i];k++){ //for(int k=s[i];k>=1;k--)也可以if(j>=v[i][k]) f[j]=max(f[j],f[j-v[i][k]]+w[i][k]); }}
}
同理,城堡,体积,分组;一开始我循环顺序错了,就一直不对。
fo(j,1,n){for(int k=m;k>=0;k--){fo(i,1,s){if(k-2*a[j][i]-1>=0)f[k] = max(f[k],f[k-2*a[j][i]-1]+i*j);}}
}
int s,n,m;
int f[20010];//恰好使用m的最大值
/*
这 s 场对决的派遣士兵方案必须相同。
*/
void solve(){cin>>s>>n>>m;vector<vector<int>>a(n+1,vector<int>(s+1));fo(i,1,s){fo(j,1,n){cin>>a[j][i];}}fo(i,1,n){sort(all(a[i]));}fo(j,1,n){for(int k=m;k>=0;k--){fo(i,1,s){if(k-2*a[j][i]-1>=0)f[k] = max(f[k],f[k-2*a[j][i]-1]+i*j);}}} // 错误的枚举方式// fo(j,1,n){// fo(i,1,s){// for(int k=m;k>=0;k--){// if(k-2*a[j][i]-1>=0)// f[k] = max(f[k],f[k-2*a[j][i]-1]+i*j);// }// }// }cout<<f[m]<<endl;
}int main(){solve();return 0;
}
还有一个可能画蛇添足的问题:总士兵数不超过 m , 所以状态定义是不超过,不能是恰好等于。
[BJOI2019] 排兵布阵(分组背包)相关推荐
- 排兵布阵 (分组背包)
排兵布阵 题目链接 大致题意: s名玩家,n座城堡,每名玩家都是m个士兵,已知该s名玩家会派a[i]士兵争夺i城堡,只有你派出的士兵严格大于其二倍,才会得到i分,求最后的最高得分 解题思路: 背包问题 ...
- 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵
洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...
- 洛谷 P5322 [BJOI2019]排兵布阵
P5322 [BJOI2019]排兵布阵 题目大意:玩游戏~~,对于 n 个城堡,有 m 个士兵可以分别派遣到这些城堡. 同时我们有 s 个对手,在每个城堡都会与每个玩家单独比拼,在第 i 个城堡与每 ...
- P5322 [BJOI2019] 排兵布阵
P5322 [BJOI2019] 排兵布阵 Summary: Description 小 C 正在排兵布阵.有 n n n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m m m 名士兵,可 ...
- 洛谷P5322 [BJOI2019] 排兵布阵 题解
洛谷P5322 [BJOI2019] 排兵布阵 题解 题意:小 C 正在玩一款排兵布阵的游戏.在游戏中有 n n n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m m m 名士兵,可以向第 ...
- P5322 BJOI2019 排兵布阵
P5322 BJOI2019 排兵布阵 本题主要考察对模型的转化能力. 首先要察觉两条性质: 对于一个城堡,想打败一个玩家的同时用最少的士兵,肯定是正好派出这个玩家在这个城堡派出的士兵数量的二倍加一名 ...
- 洛谷P5322 [BJOI2019]排兵布阵【分组背包】
题目描述 小 C 正在玩一款排兵布阵的游戏.在游戏中有 n 座城堡,每局对战由两名玩家来争夺这些城堡.每名玩家有 m 名士兵,可以向第 i 座城堡派遣 a_i名士兵去争夺这个城堡,使得总士兵数不超过 ...
- [BJOI2019]排兵布阵
排兵布阵 题解 今天比赛上这道题好像是人均题呀. 好吧,就一个简单的,连优化都不需要的背包dp. 我们每次只需要处理在比第i个城堡的第j大的玩家大的情况,不必把所有的兵的情况都处理完. 然后就可以过了 ...
- Java 解洛谷PP5322 [BJOI2019] 排兵布阵,包含完整的分组背包状态转移方法说明,通俗易懂
01.题目及链接 题目链接:https://www.luogu.com.cn/problem/P5322 02.分组背包说明 分组背包:有k组物品,N个物品,一个容量是C的背包.每组物品有若干个,同一 ...
最新文章
- Mapped Statements collection does not contain value for TaskMapper.selectByPrimaryKey
- jQuery用于请求服务器的函数
- PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
- rancher k8s docker 关系_【环境搭建】Ubuntu20.04通过rke部署K8S
- 【Java24】健康项目:环境搭建,预约管理(检查项和检查组管理)
- [置顶] CopyU!v2插件合集 [2013年7月18日更新]
- onnx 测试_ONNX 现场演示教程
- 怎样修改iis 服务器日期,怎么在IIS里设置服务器端缓存时间?
- [转]常见的用户密码加密方式以及破解方法
- ReactHooks+Antd Checkbox Group多选框组单独禁用其中选项
- 自己动手实现一个简单的 IOC,牛皮!!
- vue 生成二维码(中间logo),下载二维码,复制链接(vue + vue-qr+clipboard)
- ipad 邮箱服务器端口,ipad邮箱设置,牛排,YAHOO邮箱(后缀为yahoo
- 如何看apk支持的最低Android版本,目标Android版本?
- 无向简单图怎么判断_简单图的判定
- 用于传感器互操作性问题的指纹匹配系统的大规模研究
- Android TextView带背景图片和自定义边框
- MongoDB——文档操作(更新文档)
- MIPS-单周期CPU设计
热门文章
- android 9.0 SystemUI导航栏添加虚拟按键功能(三)
- Criterion和Criteria
- STM32串口屏学习
- 启动定时器t0的工作指令是_80c51单片机定时器t0工作于方式1定时时间1ms当晶振为6mhz时求计数初值为多少...
- 这两款好用的识别图片文字的软件app值得你们收藏
- 淘宝客微信html5,微信H5支付配置
- 使用VS2019配置EDK2安装教程
- POJ 1359 Spacecraft Malfunction G++
- 支付宝 手机页面支付 集成 出现 “系统繁忙,请稍后再试”
- 宏观经济学-大题资源整理