当前位置:网站首页>[BJOI2019] 排兵布阵(分组背包)
[BJOI2019] 排兵布阵(分组背包)
2022-07-17 05:13:00 【lovesickman】
[BJOI2019] 排兵布阵
题目描述
小 C 正在玩一款排兵布阵的游戏。在游戏中有 n n n 座城堡,每局对战由两名玩家来争夺这些城堡。每名玩家有 m m m 名士兵,可以向第 i i i 座城堡派遣 a i a_i ai 名士兵去争夺这个城堡,使得总士兵数不超过 m m m。
如果一名玩家向第 i i i 座城堡派遣的士兵数严格大于对手派遣士兵数的两倍,那么这名玩家就占领了这座城堡,获得 i i i 分。
现在小 C 即将和其他 s s s 名玩家两两对战,这 s s s 场对决的派遣士兵方案必须相同。小 C 通过某些途径得知了其他 s s s 名玩家即将使用的策略,他想知道他应该使用什么策略来最大化自己的总分。
由于答案可能不唯一,你只需要输出小 C 总分的最大值。
输入格式
输入第一行包含三个正整数 s , n , m s,n,m s,n,m,分别表示除了小 C 以外的玩家人数、城堡数和每名玩家拥有的士兵数。
接下来 s s s 行,每行 n n n 个非负整数,表示一名玩家的策略,其中第 i i i 个数 a i a_i ai 表示这名玩家向第 i i i 座城堡派遣的士兵数。
输出格式
输出一行一个非负整数,表示小 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 的最佳策略为向第 1 1 1 座城堡和第 2 2 2 座城堡各派遣 5 5 5 名士兵。
数据范围:*
对于 100 % 100\% 100% 的数据:
1 ≤ s ≤ 100 1\le s \le 100 1≤s≤100
1 ≤ n ≤ 100 1\le n \le 100 1≤n≤100
1 ≤ m ≤ 20000 1\le m \le 20000 1≤m≤20000
对于每名玩家 a i ≥ 0 a_i \ge 0 ai≥0, ∑ i = 1 n a i ≤ m \sum\limits_{i=1}^n a_i \le m i=1∑nai≤m
学会了分组背包的一些细节。
对于分组背包板子。
先循环物品,体积,最后是分组决策。
for(int i=0;i<n;i++){
for(int j=m;j>=0;j--){
// 要有j>=0
for(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 , 所以状态定义是不超过,不能是恰好等于。
边栏推荐
- 2022-7-15 廉价国产PLC工控板带485主从通信的零散记录
- SD NAND与eMMC优劣势对比
- HRA isolation series wide voltage input positive and negative high voltage regulated output
- Darwin 反射总结
- Isolate 4-20mA or 0-20mA signal transmission
- HM8203线性两串充电管理控制器IC
- MCU的最佳存储方案CS创世 SD NAND
- Unable to determine Electron version. Please specify an Electron version
- IT4058A型号单节锂离子电池充电管理
- 处理中文分词 ik分词器以及拓展和停止字典
猜你喜欢

FS68001无线充SOC芯片外围简单,5W无线充方案原理图

2021-11-17 ESP32引脚参考

NOR 与 NAND的区别对比分析

Golang multi project workspace construction

Review of software process and management (10)

数字信号隔离模块 ADUM1401ARWZ 亚德诺 库存现货

4-channel encoder pulse counter, 8-Channel do, Modbus TCP module

2019CS品牌SDNAND和eMMC选择对比重要分析

Hm9922 switching buck LED constant current driver IC

LTH7五脚芯片的完整方案图FS4054充电电路原理
随机推荐
busybox date 日期增加一天明天 网上都是减一天 昨天
Review of software process and management (IX)
软考初、中、高级考试全体验
uboot 编译前的配置命令make config分析
为什么方案商“钟情”选择CS创世SD NAND
4路编码器脉冲计数器,8路DO,Modbus TCP模块
谷歌浏览器不能手动修改cookies,cookie报红标红
HM8203线性两串充电管理控制器IC
Review of software process and management (10)
HRA隔离系列 宽电压输入 正负高电压稳压输出
【转】Darwin Streaming Server 核心代码分析
Hm8203 linear two string charging management controller IC
MySQL Workbench基本使用【创建一个数据库】
DSL实现自动补全查询
busybox date 时间的加减
Analog signal in-depth discussion on the transmission distance of 4-20mA current signal
Tips for using tp4054 charging IC -- used in conjunction with Zhongke Lanxun ab5365b
Fs68001 wireless charging SOC chip has simple periphery and schematic diagram of 5W wireless charging scheme
什么是tSD/qSD?CS创世 SD NAND到底是什么?
Dac7512n analog mixed signal IC converter