【BJOI2019】排兵布阵 DP
题目大意:有$n$座城堡,$s$轮游戏。
对于第$x$轮,第i座城堡的士兵数量为$a[x][i]$。
如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必须严格大于$2a[x][i]$,如果攻下了你会获得$i$的收益。
对于这$s$轮游戏,你只能采用一种部署方式。
下面问你应该如何部署,使得你在这$s$轮游戏中的收益和最大。
数据范围:$n,s≤100$,$m≤2000$。
我们考虑直接$dp$,设$f[i][j]$表示前$i$个城堡部署了$j$名士兵的最大收益。
不难发现,$f[i][j]=\max\limits_{k≤j,k∈a[][i]} f[i-1][j-k]+val[i][k]$。
其中,$val[i][k]$表示你在第$i$城堡部署$k$个人的收益和。
直接$dp$就可以了,复杂度为$O(nms)$。
#include<bits/stdc++.h>
#define M 105
#define N 20005
using namespace std; int f[M][N]={},a[M][M]={},val[M][M]={};
int s,n,m; int main(){
scanf("%d%d%d",&s,&n,&m);
for(int i=;i<=s;i++)
for(int j=;j<=n;j++) scanf("%d",&a[i][j]); for(int i=;i<=n;i++){
for(int j=;j<=s;j++){
for(int k=;k<=s;k++)
if(a[j][i]>=a[k][i]) val[i][j]++;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
f[i][j]=f[i-][j];
for(int k=;k<=s;k++)
if(j>a[k][i]*){
f[i][j]=max(f[i][j],f[i-][j-a[k][i]*-]+val[i][k]*i);
}
}
int maxn=;
for(int i=;i<=m;i++)
maxn=max(maxn,f[n][i]);
cout<<maxn<<endl;
}
【BJOI2019】排兵布阵 DP的更多相关文章
- [BJOI2019]排兵布阵 DP
[BJOI2019]排兵布阵 DP 比较好想的DP,设\(dp[i][j]\)表示第\(i\)个城堡时,已派出\(j\)个士兵.决策时,贪心派出恰好严格大于某一玩家派出的数量的两倍(不然浪费).我们发 ...
- LuoguP5322 [BJOI2019]排兵布阵(DP)
城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- [BJOI2019]排兵布阵(动态规划)
[BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现 ...
- [BJOI2019]排兵布阵——分组背包
题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以 ...
- LOJ 3092 「BJOI2019」排兵布阵 ——DP
题目:https://loj.ac/problem/3092 同一个人的不同城堡之间没有什么联系,只是和<=m.所以对每个城堡的 s 个值排序,做一个 f[ i ][ j ] 表示第 i 个城堡 ...
- luogu P5322 [BJOI2019]排兵布阵
传送门 普及dp 设\(f_{i,j}\)表示前\(i\)个城堡,用\(j\)人的最大价值,转移枚举一个对手,如果这个对手在\(i\)这个城堡人数是第\(k\)小的,那么用\(2a_i+1\)人可以得 ...
- [BJOI2019] 排兵布阵
题目 这个\(dp\)出在普及都算水题吧 直接背包,\(O(nms)\)跑不满,非常稳 #include<cstdio> #include<vector> #include&l ...
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
HDU 4539 郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...
- 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)
郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
随机推荐
- 初学c# -- c#创建开机自启服调用外部交互式exe文件
在c#创建的开机自启动服务里,调用外部可执行文件有以下问题:1.带窗口的交互式的exe文件调用后,实际并没有被执行:2.服务是随windows启动的,服务启动后可能windows桌面还没出来,会报错误 ...
- C++ 实现 split 操作
理由:由于 C++ 标准库里面没有字符分割函数 split ,这可太不方便了,我们利用 STL 来实现自己的 split 函数: 原型:vector<string> split(const ...
- 如何配置Java环境变量[转]
https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html
- centos7 smplayer 安装 安装视频播放器
# yum -y install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noar ...
- Javascript组成--ECMAScript,DOM,BOM
ECMAScript 部分 ECMAScript是一个标准,JS只是它的一个实现,其他实现包括ActionScript; “ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力”,即EC ...
- jquery.validate.js的简单示例
一.官方资料 官网 github 二.html <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...
- MPLAB X IDE V4.15 创建工程,编译,问题处理
初步接触,有错误的地方还请大神们务必提出来,防止误导他人 硬件环境:MCU--PIC18F67K22 仿真下载器--ICD 3 编译环境:MPLAB X IDE V4.15 中文版 工作需要接触到了P ...
- 【linux轻松学】centos6.5上搭建svn服务器
今天花了一下午,把svn环境搭好了,写篇文章分享…… 1.安装 先查看是否已经安装,如果有旧版,先删除再安装. 查看rpm -qa subversion 删除yum remove subversion ...
- 《Linux就该这么学》第七天课程
昨天晚上我找了刘老师决定了报考红帽RHCSA,RHCE认证,我不指望这个认证能给我带来工作上的某些福利,毕竟出去闯靠的是实力外加运气 我只是希望通过这个认证来激励自己! 下面是分享的一些干货! 原创地 ...
- 我的idea突然没有SVN了是怎么回事
总结一下没有svn选项的几种情况: 情况1:IntelliJ IDEA打开带SVN信息的项目不显示SVN信息,项目右键SVN以及图标还有Changes都不显示解决方法 在VCS菜单中有个开关,叫Ena ...