题目大意:有$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的更多相关文章

  1. [BJOI2019]排兵布阵 DP

    [BJOI2019]排兵布阵 DP 比较好想的DP,设\(dp[i][j]\)表示第\(i\)个城堡时,已派出\(j\)个士兵.决策时,贪心派出恰好严格大于某一玩家派出的数量的两倍(不然浪费).我们发 ...

  2. LuoguP5322 [BJOI2019]排兵布阵(DP)

    城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  3. [BJOI2019]排兵布阵(动态规划)

    [BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现 ...

  4. [BJOI2019]排兵布阵——分组背包

    题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以 ...

  5. LOJ 3092 「BJOI2019」排兵布阵 ——DP

    题目:https://loj.ac/problem/3092 同一个人的不同城堡之间没有什么联系,只是和<=m.所以对每个城堡的 s 个值排序,做一个 f[ i ][ j ] 表示第 i 个城堡 ...

  6. luogu P5322 [BJOI2019]排兵布阵

    传送门 普及dp 设\(f_{i,j}\)表示前\(i\)个城堡,用\(j\)人的最大价值,转移枚举一个对手,如果这个对手在\(i\)这个城堡人数是第\(k\)小的,那么用\(2a_i+1\)人可以得 ...

  7. [BJOI2019] 排兵布阵

    题目 这个\(dp\)出在普及都算水题吧 直接背包,\(O(nms)\)跑不满,非常稳 #include<cstdio> #include<vector> #include&l ...

  8. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  9. 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)

    郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

随机推荐

  1. Ubuntu安装软件提示boot空间不足

    用sudo apt-get install gitlab-ci-multi-runner安装应用都会出现“gzip: stdout: No space left on device”的问题. boot ...

  2. 【前言】Go语言开坑

    很早之前就已经听过Go语言的大名,今天终于要开坑研究Go了,来吧看看<Go语言从入门到入坟>. [Go语言学习目录] 1. Go安装 2. Go变量(Variables) 3. Go语言基 ...

  3. dump、load和dumps、loads的区别

    dump: 将dict(字典)转换为str(字符串),并写入json文件中. load: 用于从json文件中读取数据 运行结果: dumps: 将dict(字典)转换为str(字符串). 运行结果: ...

  4. freemaker超详细 讲解 配置

    一.FreeMarker简介 二.第一个FreeMark示例 2.1.新建一个Maven项目 2.2.添加依赖 2.3.添加存放模板的文件夹 2.4.添加模板 2.5.解析模板 2.6.运行结果 三. ...

  5. 记一次SQL性能优化,查询时间从4000ms优化到200ms.

    以下这句SQL是从PLM中获取代办工作流的.没优化前SQL语句执行一次大概4000ms(4秒). select ch.change_number changeNumber, f.text change ...

  6. 事件委托在ios下面失效

    $(document).on("click","目标class",function(){ //安卓下点击可以,ios下面失效 }) 百度了下说是H5新定义的, ...

  7. calendar模块

    calendar模块是个日历模块 1  判断是否是闰年 #!/urs/bin/evn python # -*- coding:utf-8 -*- import calendar print(calen ...

  8. 过滤器(Filter)与拦截器(Interceptor)区别

    过滤器(Filter)与拦截器(Interceptor)区别 过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途 ...

  9. github管理项目

    1.在GitHub上创建一个项目,然后拷贝git地址. 2.在本地打开GIT CMD,然后建立一个文件夹,输入git clone 上面拷贝的git地址. 3.文件夹下会多出一个以你创建的项目名字的文件 ...

  10. 《笨方法学Python》加分题10

    print(r"\n [换行]演示:", "\n第一行\n第二行") print("-" * 20) print(r"\\ [反斜 ...