BZOJ.3928.[CERC2014]Outer space invaders(区间DP)
BZOJ3928
双倍经验BZOJ4048
Codeforces GYM100543 L
\(Description\)
\(Solution\)
考虑出现时间在\([l,r]\)内的敌人,设最远的敌人距离为\(d_{max}\),我们至少要用一次半径\(r=d_{max}\)的攻击以消灭它。
如果我们选择在\(t\)时刻攻击这个距离最远的,那么时间区间跨越\(t\)的其它敌人也会被顺带消灭。
这样就划分成了两个子区间的问题。
先对时间区间离散化,然后区间DP,对当前区间找出距离最远的敌人,然后枚举消灭它的时刻\(t\)。
复杂度\(O(n^3)\)。
因为要找距离最远的,所以先对敌人排序,可以有效优化常数。。(而且结构体确实要比数组慢?)
//2260kb 544ms(2260kb 1768ms)
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=605;
int ref[N],f[N][N];
struct Node
{
int l,r,dis;
bool operator <(const Node &x)const
{
return dis>x.dis;
}
}A[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline int Find(int x,int r)
{
int l=1,mid;
while(l<r)
if(ref[mid=l+r>>1]<x) l=mid+1;
else r=mid;
return l;
}
int main()
{
for(int T=read(); T--; )
{
int n=read(),t=0;
for(int i=1; i<=n; ++i) ref[++t]=A[i].l=read(),ref[++t]=A[i].r=read(),A[i].dis=read();
std::sort(A+1,A+1+n);
std::sort(ref+1,ref+1+t); int cnt=1;
for(int i=2; i<=t; ++i) if(ref[i]!=ref[i-1]) ref[++cnt]=ref[i];
for(int i=1; i<=n; ++i) A[i].l=Find(A[i].l,cnt), A[i].r=Find(A[i].r,cnt);
for(int len=0; len<cnt; ++len)
for(int i=1; i+len<=cnt; ++i)
{
int j=i+len,mx=0;
for(int k=1; k<=n; ++k)
if(i<=A[k].l && A[k].r<=j) {mx=k; break;}
if(!mx) {f[i][j]=0; continue;}
int tmp=1000000000;
for(int k=A[mx].l,R=A[mx].r,cost=A[mx].dis; k<=R; ++k)//不是i~j。。
tmp=std::min(tmp,f[i][k-1]+f[k+1][j]+cost);
f[i][j]=tmp;
}
printf("%d\n",f[1][cnt]);
}
return 0;
}
BZOJ.3928.[CERC2014]Outer space invaders(区间DP)的更多相关文章
- bzoj 3928: [Cerc2014] Outer space invaders
$f[i][j]$表示消灭起始时间在$(i,j)$内的外星人所花费的最小代价. 考虑在这个区间内距离最远的外星人h,在他的区间中一定要选一个点要开一炮,而且这一炮可以顺便把其他跨过这个点的敌人消灭,剩 ...
- Codeforces Gym100543L Outer space invaders 区间dp 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543L.html 题目传送门 - CF-Gym100543L 题意 $T$ 组数据. 有 $n ...
- BZOJ3928 [Cerc2014] Outer space invaders
第一眼,我勒个去...然后看到n ≤ 300的时候就2333了 首先把时间离散化,则对于一个时间的区间,可以知道中间最大的那个一定要被选出来,然后把区间分成左右两份 于是区间DP就好了,注意用左开右开 ...
- [CERC2014] Outer space invaders
题目链接 题意 你受到一群外星人的攻击,第 $i$ 个外星人会在 $ai$ 时间出现,与你的距离为 $di$,且必须在 $bi$ 时间前消灭.你有一个区域冲击波器,每次攻击可以设定一个功率 $R$,这 ...
- 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
传送门 区间dpdpdp好题. 首先肯定需要把坐标离散化. 然后在数轴上面区间dpdpdp. 对于当前区间,区间中最大的数一定会被选. 于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在i ...
- [BZOJ3928/4048]Outer space invaders
[BZOJ3928/4048]Outer space invaders 题目大意: 有\(n(n\le300)\)个物品,第\(i\)个物品会在\(a_i\sim b_i\)时刻出现,且离你的距离为\ ...
- Codeforces Gym100543L:Outer space invaders(区间DP)
题目链接 题意 有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人 ...
- BZOJ.4897.[Thu Summer Camp2016]成绩单(区间DP)
BZOJ 显然是个区间DP.令\(f[l][r]\)表示全部消掉区间\([l,r]\)的最小花费. 因为是可以通过删掉若干子串来删子序列的,所以并不好直接转移.而花费只与最大最小值有关,所以再令\(g ...
- bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1258 Solved: 729[Submit][Statu ...
随机推荐
- 非常干货之Python资源大全
非常干货之Python资源大全
- imp高版本的dmp文件报错问题
imp高版本的dmp文件报错问题 导出方:oracle 11R2 www.2cto.com 导入方:oracle 10R2 通过imp导入时提示如下: 解决方法: 通过编 ...
- js使用中的小问题----textarea是否有value属性
使用jquery的选择器时想给textarea设置一个默认值时,采取了下面的方法: 不过失败了,但是看教程上确实成功的,那么肯定是有问题的. 经过上网查找以及自己验证发现: 1.textarea标签确 ...
- python 语言特性
动态强类型: 动态类型语言:在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量的数据类型,比如Python和Ruby 静态类型语言:它的数据类型是在编译期进行检查的,也就是说变量在使用前 ...
- 关于Java Web应用中的配置部署描述符web.xml
一.web.xml概述 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这个 web.xml文件对于Java Web应用十分重要,每个Java Web应用都必须包含一个w ...
- Android9.0新特性曝光,你准备好了吗
Android9.0最早出现在2018年1月25日的谷歌官网上,初步代号已经确定为“Pistachio Ice Cream”(开心果冰淇淋),不过按照Google的惯例,如此长的三个单词代号,通常都只 ...
- Adam优化算法
Question? Adam 算法是什么,它为优化深度学习模型带来了哪些优势? Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别. Adam 算法应该 ...
- 扩展欧几里得,解线性同余方程 逆元 poj1845
定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return ...
- 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题
使用Jprofiler监控分析案例 一.cpu负载过高:http://localhost:8080/PerfTeach/CpuTopServlet?id=1 cpu消耗高的可能原因1.使用了复杂的算法 ...
- 使用spring-boot-starter-data-jpa 怎么配置使运行时输出SQL语句
在 application.properties 中加入以下配置 spring.jpa.show-sql=true