LOJ 3092 「BJOI2019」排兵布阵 ——DP
题目:https://loj.ac/problem/3092
同一个人的不同城堡之间没有什么联系,只是和<=m。所以对每个城堡的 s 个值排序,做一个 f[ i ][ j ] 表示第 i 个城堡花 j 的代价最大能得到多少收益。
dp[ i ][ j ] 表示前 i 个城堡花 j 的代价的最大收益。 dp[ i ][ j ] = max( dp[ i-1 ][ k ] + f[ i ][ j-k ] ) 。
发现 f[ i ][ * ] 是一个分 s 段的函数。所以枚举 s 段即可。也就是把 f 改成 f[ i ][ s ] 表示第 i 个城堡得到 s 的收益最少花多少代价。
dp[ i ][ j ] = max( s + dp[ i-1 ][ j-f[ i ][ s ] ] ) 。注意代价要乘 i 。
时间是 2e8 却能过。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
int Mx(int a,int b){return a>b?a:b;}
const int N=,M=2e4+;
int cnt,n,m,a[N][N],f[N][N],dp[N][M];
int main()
{
cnt=rdn();n=rdn();m=rdn();
for(int i=;i<=cnt;i++)
for(int j=;j<=n;j++)a[j][i]=rdn();
for(int i=;i<=n;i++)
{
sort(a[i]+,a[i]+cnt+);
for(int j=;j<=cnt;j++)
f[i][j]=*a[i][j]+;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int s=;s<=cnt;s++)
{
if(j<f[i][s])break;
dp[i][j]=Mx(dp[i][j],s*i+dp[i-][j-f[i][s]]);
}
printf("%d\n",dp[n][m]);
return ;
}
LOJ 3092 「BJOI2019」排兵布阵 ——DP的更多相关文章
- LOJ#3092. 「BJOI2019」排兵布阵(递推)
题面 传送门 题解 设\(dp_{i,j}\)表示前\(i\)座塔派了总共\(j\)个人的最大收益,转移显然 //minamoto #include<bits/stdc++.h> #def ...
- 【LOJ】#3092. 「BJOI2019」排兵布阵
LOJ#3092. 「BJOI2019」排兵布阵 这题就是个背包啊,感觉是\(nms\)的但是不到0.2s,发生了什么.. 就是设\(f[i]\)为选了\(i\)个人最大的代价,然后有用的人数只有\( ...
- 【BJOI2019】排兵布阵 DP
题目大意:有$n$座城堡,$s$轮游戏. 对于第$x$轮,第i座城堡的士兵数量为$a[x][i]$. 如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必须严格大于$2a[x][i]$,如果攻下了你会 ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
- [BJOI2019]排兵布阵 DP
[BJOI2019]排兵布阵 DP 比较好想的DP,设\(dp[i][j]\)表示第\(i\)个城堡时,已派出\(j\)个士兵.决策时,贪心派出恰好严格大于某一玩家派出的数量的两倍(不然浪费).我们发 ...
- loj 3090 「BJOI2019」勘破神机 - 数学
题目传送门 传送门 题目大意 设$F_{n}$表示用$1\times 2$的骨牌填$2\times n$的网格的方案数,设$G_{n}$$表示用$1\times 2$的骨牌填$3\times n$的网 ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
- LOJ 3094 「BJOI2019」删数——角标偏移的线段树
题目:https://loj.ac/problem/3094 弱化版是 AGC017C . 用线段树维护那个题里的序列即可. 对应关系大概是: 真实值的范围是 [ 1-m , n+m ] :考虑设偏移 ...
随机推荐
- datastudio 里关于with as 的用法。
datastudio 里sql 语句的写法,加入with as 语法. 这样方便查询,易于维护.以后都这样写. 优点: 1 易于维护,可以复用代码块 2 优化书写逻辑,方便查阅理解. 3 性能方面优 ...
- 第 2 章 前端基础之CSS
一.CSS语法 CSS规则由两个主要的部分构成:选择器,以及一条或多条声明. ''' selector { property: value; property: value; ... property ...
- CentOS7.4伪分布式搭建 hadoop+zookeeper+hbase+opentsdb
前言 由于hadoop和hbase都得想zookeeper注册,所以启动顺序为 zookeeper——>hadoop——>hbase,关闭顺序反之 一.前期准备 1.配置ip 进入文件编辑 ...
- java数组,遍历数组
数组:一组具有相同数据类型的集合(容器) 1.数组声明格式: 数据类型 [] 数组名 = new 数据类型[长度]: 数组长度一旦确定无法更改. 数组里的数据必须是相同类型或自动向上转型后兼容的类型 ...
- jvm 更多链接
http://www.cnblogs.com/dingyingsi/p/3760447.html : 讲解 jvm https://blog.csdn.net/Luomingkui1109/a ...
- vuejs基础-style样式
在Vue中使用样式 使用class样式 数组 <h1 :class="['red', 'thin']">这是一个邪恶的H1</h1> 数组中使用三元表达式 ...
- Learning OSG programing---Multi Camera in one window 在单窗口中创建多相机
在学习OSG提供的例子osgCamera中,由于例子很长,涉及很多细节,考虑将其分解为几个小例子.本文介绍实现在一个窗口中添加多个相机的功能. 此函数接受一个Viewer引用类型参数,设置图形上下文的 ...
- 《JAVA设计模式》之责任链模式(Chain of Responsibility)
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- kmp(多次无重叠匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面 ...
- SpringBoot-技术专区-详细打印启动时异常堆栈信息
SpringBoot在项目启动时如果遇到异常并不能友好的打印出具体的堆栈错误信息,我们只能查看到简单的错误消息,以致于并不能及时解决发生的问题,针对这个问题SpringBoot提供了故障分析仪的概念( ...