2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
传送门
区间dpdpdp好题。
首先肯定需要把坐标离散化。
然后在数轴上面区间dpdpdp.
对于当前区间,区间中最大的数一定会被选。
于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在iii以及其后面,右端点在jjj以及其前面的所有外星人gggggg的最小花费。
由于最大的一定被选。
于是我们枚举它是在哪个时间点被选的。
然后用f[i][k−1],f[k+1][j]f[i][k-1],f[k+1][j]f[i][k−1],f[k+1][j]转移过来就行了。(时间点经过了kkk的都不会再被选了)
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=305;
int T,n,val[N<<1],siz=0,f[N<<1][N<<1];
struct Node{int s,t,r;}p[N],mx[N<<1][N<<1];
inline int dfs(int l,int r){
if(~f[l][r])return f[l][r];
if(r<l||!mx[l][r].r)return f[l][r]=0;
Node mxn=mx[l][r];
f[l][r]=0x3f3f3f3f;
for(int k=mxn.s;k<=mxn.t;++k)f[l][r]=min(f[l][r],dfs(l,k-1)+dfs(k+1,r)+mxn.r);
return f[l][r];
}
int main(){
T=read();
while(T--){
n=read(),memset(f,-1,sizeof(f)),memset(mx,0,sizeof(mx)),siz=0;
for(int i=1;i<=n;++i)val[++siz]=p[i].s=read(),val[++siz]=p[i].t=read(),p[i].r=read();
sort(val+1,val+siz+1),siz=unique(val+1,val+siz+1)-val-1;
for(int i=1;i<=n;++i)p[i].s=lower_bound(val+1,val+siz+1,p[i].s)-val,p[i].t=lower_bound(val+1,val+siz+1,p[i].t)-val;
for(int i=1;i<=n;++i)for(int l=p[i].s;l;--l)for(int r=p[i].t;r<=siz;++r)if(mx[l][r].r<p[i].r)mx[l][r]=p[i];
printf("%d\n",dfs(1,siz));
}
return 0;
}
2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)的更多相关文章
- BZOJ.3928.[CERC2014]Outer space invaders(区间DP)
BZOJ3928 双倍经验BZOJ4048 Codeforces GYM100543 L \(Description\) \(Solution\) 考虑出现时间在\([l,r]\)内的敌人,设最远的敌 ...
- BZOJ3928 [Cerc2014] Outer space invaders
第一眼,我勒个去...然后看到n ≤ 300的时候就2333了 首先把时间离散化,则对于一个时间的区间,可以知道中间最大的那个一定要被选出来,然后把区间分成左右两份 于是区间DP就好了,注意用左开右开 ...
- 2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)
传送门 当看到那个k≤8k\le 8k≤8的时候就知道需要状压了. 状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk ...
- Codeforces Gym100543L Outer space invaders 区间dp 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543L.html 题目传送门 - CF-Gym100543L 题意 $T$ 组数据. 有 $n ...
- [BZOJ3928/4048]Outer space invaders
[BZOJ3928/4048]Outer space invaders 题目大意: 有\(n(n\le300)\)个物品,第\(i\)个物品会在\(a_i\sim b_i\)时刻出现,且离你的距离为\ ...
- bzoj 3928: [Cerc2014] Outer space invaders
$f[i][j]$表示消灭起始时间在$(i,j)$内的外星人所花费的最小代价. 考虑在这个区间内距离最远的外星人h,在他的区间中一定要选一个点要开一炮,而且这一炮可以顺便把其他跨过这个点的敌人消灭,剩 ...
- [CERC2014] Outer space invaders
题目链接 题意 你受到一群外星人的攻击,第 $i$ 个外星人会在 $ai$ 时间出现,与你的距离为 $di$,且必须在 $bi$ 时间前消灭.你有一个区域冲击波器,每次攻击可以设定一个功率 $R$,这 ...
- 2018.10.25 CCSP马拉松摸铜归来
24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...
- 课堂笔记及知识点----UI框架简介(2018/10/25)
UI框架学习目标: 要知道怎样套用的! 框架里面的基本执行流程 怎样开始执行(配置文件) 怎么套用 最主要的三个脚本: (也是多态的体现之一) 1).BaseUI: 作用-->提供UI能够使用的 ...
随机推荐
- 微信小程序开发——前端如何区分小程序运行环境
前言: 之前用vue做h5项目,对于接口请求,都是根据前端访问域名来判断运行环境,然后自动适配对应的服务器地址的.这样的好处就是在开发.测试及发布上线全程都不需要手动去改接口请求地址,只要提前配置好就 ...
- DES对称加密
DES是对称性加密里面常见一种,全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对称性加密,加密 ...
- POJ 2230 Watchcow(有向图欧拉回路)
Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the ...
- c++笔试题贪吃蛇问题
贪吃蛇 现在有一个N*M(N,M=100)的方形矩形,在这个矩形的每一个方格上都放有一个随机值,一条可爱的小蛇从矩形的 左上角开始出发,每次移动都只能移动一格,向右或向下,而每到达一格贪吃的小蛇都会吧 ...
- Swift 常量、变量、条件判断
- 常量用 let ,变量用 var - // Optional为可选项,// 可用类型值 + ? 代替 let x: Optional = 10 let y: Int? = 5 print(x! + ...
- 梦殇 chapter six
如行尸走肉般的坐在教室,看著书上密密麻麻的字,心却久久不能平静. 自己已经不再是当初那个懵懂,无知的小女孩了.仰望天空45度,让眼泪流回眼睛. 是该告别彷徨,告别懵懂的年纪了. 早些年许下的诺言,如今 ...
- .Net连接字符串设置连接池大小显著提高数据库速度
在访问mysql数据库时,如果在连接字符串中设置使用连接池,同时设置连接池大小,经测试,可以显著提高访问数据库时的速度. 连接字符串: connectionStrings> <add ...
- 对于devexpress gridview 内插图加加进度条等的一点解读
如上图,gategory 加了小图标, 其他行内还有计算器,大图片 进度条等 using System; using System.Drawing; using System.Collection ...
- Java开发MIS系统需要的技术及其作用
1.后台框架部分,常用spring.struts2(Struts2框架,提供了一种基于MVC体系结构的工程序的开发方法,具有组件模块化.灵活性和重用性等优点,使基于MVC模式的程序结构更加清晰,同时也 ...
- Oracle触发器(trigger):一般用法
trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...