[BZOJ3928/4048]Outer space invaders

题目大意:

有\(n(n\le300)\)个物品,第\(i\)个物品会在\(a_i\sim b_i\)时刻出现,且离你的距离为\(d_i\),每个时刻你可以花\(r\)的代价将离你距离\(r\)以内的物品清理掉。问清理掉所有物品的代价至少为多少?

思路:

区间DP。用\(f_{l,r}\)表示将出现时间完全包含在\(l\sim r\)之间的物品全部清理掉需要的代价,找到距离最远的物品\(h\),则\(f_{l,r}=\min\{f_{l,k-1}+f_{k+1,r}+d_h\}(a_h\le k\le b_h)\)。

时间复杂度\(\mathcal O(n^3)\)。

源代码:

#include<vector>
#include<cstdio>
#include<cctype>
#include<climits>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=301,logN=9;
struct Node {
int a,b,d;
};
Node node[N];
int n,f[N*2][N*2];
std::vector<int> v;
int dp(const int &l,const int &r) {
if(l>r) return 0;
int &ans=f[l][r];
if(ans!=INT_MAX) return ans;
int h=0;
for(register int i=1;i<=n;i++) {
if(node[i].a<l||node[i].b>r) continue;
if(node[i].d>node[h].d) h=i;
}
if(h==0) return ans=0;
for(register int k=node[h].a;k<=node[h].b;k++) {
ans=std::min(ans,dp(l,k-1)+dp(k+1,r)+node[h].d);
}
return ans;
}
int main() {
for(register int T=getint();T;T--) {
n=getint();
v.clear();
for(register int i=1;i<=n;i++) {
v.push_back(node[i].a=getint());
v.push_back(node[i].b=getint());
node[i].d=getint();
}
std::sort(v.begin(),v.end());
v.resize(std::unique(v.begin(),v.end())-v.begin());
const int m=v.size();
for(register int i=1;i<=n;i++) {
node[i].a=std::lower_bound(v.begin(),v.end(),node[i].a)-v.begin()+1;
node[i].b=std::lower_bound(v.begin(),v.end(),node[i].b)-v.begin()+1;
}
for(register int i=1;i<=m;i++) {
std::fill(&f[i][1],&f[i][m]+1,INT_MAX);
}
printf("%d\n",dp(1,m));
}
return 0;
}

[BZOJ3928/4048]Outer space invaders的更多相关文章

  1. BZOJ3928 [Cerc2014] Outer space invaders

    第一眼,我勒个去...然后看到n ≤ 300的时候就2333了 首先把时间离散化,则对于一个时间的区间,可以知道中间最大的那个一定要被选出来,然后把区间分成左右两份 于是区间DP就好了,注意用左开右开 ...

  2. 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)

    传送门 区间dpdpdp好题. 首先肯定需要把坐标离散化. 然后在数轴上面区间dpdpdp. 对于当前区间,区间中最大的数一定会被选. 于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在i ...

  3. BZOJ.3928.[CERC2014]Outer space invaders(区间DP)

    BZOJ3928 双倍经验BZOJ4048 Codeforces GYM100543 L \(Description\) \(Solution\) 考虑出现时间在\([l,r]\)内的敌人,设最远的敌 ...

  4. Codeforces Gym100543L Outer space invaders 区间dp 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543L.html 题目传送门 - CF-Gym100543L 题意 $T$ 组数据. 有 $n ...

  5. bzoj 3928: [Cerc2014] Outer space invaders

    $f[i][j]$表示消灭起始时间在$(i,j)$内的外星人所花费的最小代价. 考虑在这个区间内距离最远的外星人h,在他的区间中一定要选一个点要开一炮,而且这一炮可以顺便把其他跨过这个点的敌人消灭,剩 ...

  6. Codeforces Gym100543L:Outer space invaders(区间DP)

    题目链接 题意 有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人 ...

  7. [CERC2014] Outer space invaders

    题目链接 题意 你受到一群外星人的攻击,第 $i$ 个外星人会在 $ai$ 时间出现,与你的距离为 $di$,且必须在 $bi$ 时间前消灭.你有一个区域冲击波器,每次攻击可以设定一个功率 $R$,这 ...

  8. Space Invaders 太空侵略者

    发售年份 1978 平台 街机 开发商 Taito 类型 射击 https://www.youtube.com/watch?v=MU4psw3ccUI

  9. 区间dp提升复习

    区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i, ...

随机推荐

  1. Imperva正则表达式的添加以及使用

    Imperva正则表达式的添加以及使用 1.添加字典 创建策略 模拟访问产生告警

  2. Cloud Lab: 泰晓实验云台【转】

    转自:http://tinylab.org/cloud-lab/ 可快速构建的计算机课程在线实验平台 由 Wu Zhangjin 创建于 2017/10/06 评论 打赏 项目描述 泰晓实验云台 项目 ...

  3. Tslib步骤以及出现问题的解决方案【转】

    转自:http://forum.eepw.com.cn/thread/267828/1 嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准.校准广泛使用的是开源的tslib. ...

  4. mybatis比hibernate处理速度快的原因

    mybatis:是面向结果集的.当要展示的页面需要几个字段时,springmvc会提供这几个字段并将其拼接成结果集,在转化为相应的对象. hibernate:是面向对象的.要展示的页面需要某些字段时, ...

  5. 01 Go 1.1 Release Notes

    Go 1.1 Release Notes Introduction to Go 1.1 Changes to the language Integer division by zero Surroga ...

  6. Python访问MySQL(1):初步使用PyMySQL包

    Windows 10家庭中文版,MySQL 5.7.20 for Win 64,Python 3.6.4,PyMySQL 0.8.1,2018-05-08 ---- 使用Python访问MySQL数据 ...

  7. 网络协议之UDP

    前言 TCP协议在不可靠的网络环境上提供了可靠的通信通道,隐藏了大量的底层细节,使应用程序更加简洁.但有些应用并不需要这么高的可靠性,并不需要按序交付,而且TCP为了提高可靠性也增加了延时,在某些对延 ...

  8. MySql数据库 主从复制/共享 报错

    从 获取不到 共享主的数据, 错误信息: Waiting for master to send event 解决方案: // 1. 从V表获取PrNo的数据 select * from Vendor_ ...

  9. MinGW-MSYS Bundle Win32编译ffmpeg 生成DLL并加入X264模块

    组件资源站点 1)MinGW-MSYS Bundle http://sourceforge.net/projects/mingwbundle/files/ 2)yasm汇编器 http://yasm. ...

  10. 调研助力4S店,解码困境谜团

    关键词————4S店.汽车.销售.精准营销.闭环.用户满意度.精细化管理 一.背景 4S店是“四位一体”的汽车销售专卖店,包括了整车销售.零配件供应.售后服务.信息反馈四项功能. 信息化管理 精细化管 ...