当前位置: 首页 > news >正文

[题解]P5322 [BJOI2019] 排兵布阵

P5322 [BJOI2019] 排兵布阵

我们可以预处理出第 \(i\) 个城堡分配 \(j\) 的兵力能获得多少的得分,记为 \(w[i][j]\)

则每一个 \(w[i]\) 都是一个泛化物品,即价值(\(w[i][j]\))随着分配体积(\(j\))变化的物品。将两个泛化物品合并的代价是 \(O(m^2)\) 的,总时间 \(O(nm^2)\) 无法接受。

但是我们将问题过度一般化了。实际上这个泛化物品只有 \(s\) 个分段点,完全可以看作一个 \(s\) 个物品的分组背包。若按体积(兵力)为这些物品排序,它们的价值实际上相当于求了原序列的一个前缀和,即 \(i,2i,3i,\dots\)

image

所以分组背包即可。时间复杂度 \(O(nms)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=102,M=20002,S=102;
int s,n,m,a[N][S],f[M];
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>s>>n>>m;for(int i=1;i<=s;i++) for(int j=1;j<=n;j++) cin>>a[j][i];for(int i=1;i<=n;i++) sort(a[i]+1,a[i]+1+s);for(int i=1;i<=n;i++){for(int k=m;k;k--){for(int j=1;j<=s;j++){if(k>2*a[i][j]) f[k]=max(f[k],f[k-2*a[i][j]-1]+i*j);}}}cout<<f[m]<<"\n";return 0;
}

学到的:分组物品,对于每一组,若某个物品体积 \(\le\) 该组分配的体积即可选(即取 \(\max\) 而非求和),则可以通过对价值前缀和而转为分组背包。

http://www.jsqmd.com/news/24916/

相关文章:

  • 考前打印
  • 申威服务器安装Nacos 2.0.3 RPM包详细步骤(Kylin V10 sw_64架构)​附安装包
  • ZKY精选冲刺省选国赛仿真训练题
  • MySQL 查询与更新语句执行过程深度解析:从原理到实践​ - 指南
  • ZKY精选冲刺省选国赛技巧训练题
  • 逆向基础--编码(001)
  • 20251027 - 倍增 ST表
  • 周康阳精选冲刺省选国赛思维训练题
  • Luogu P7913 [CSP-S 2021] 廊桥分配 题解 [ 绿 ] [ 贪心 ] [ 前缀和 ] [ STL ]
  • 10-27 CSP 赛前比赛记录
  • P3939 数颜色
  • 完整教程:Docker 搭建 Nginx 并启用 HTTPS 具体部署流程
  • AI开发微信小程序-有感
  • 价值流智能时代:DevOps平台如何成为企业高效交付的核心引擎? - 教程
  • 2025年压力容器品牌综合实力排行榜
  • 2025年压力容器厂家综合评测与选择指南
  • 2025年口碑好的压力容器工厂/厂家前十强
  • 科幻——面包
  • 2025年中国钢结构码垛机制造商Top 5排名解析
  • 2025年钢结构码垛机品牌前十强权威盘点:江苏众利达引领智能制造新浪潮
  • 处理django.db.utils.OperationalError: attempt to write a readonly database错误
  • 10.28代码大全2
  • [GESP202509 二级] 菱形
  • 11hhs
  • linux 配置vnc
  • 2025 ICPC 成都 游记
  • 基于PSO粒子群优化算法的64QAM星座图的最优概率整形matlab仿真,对比PSO优化前后整形星座图和误码率
  • 第七周第二天7.2
  • apisix流量高峰期服务卡住问题
  • 第七周第一天7.1