题目链接

题意

有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人都可以被炸死。问炸死所有人的最小花费是多少。

例如样例就是在第四个时间点炸,这样可以把三个人都炸死。

思路

区间DP。将时间离散化,dp[st][ed]表示炸完在st到ed这段时间的所有人的最小花费是多少。

我们每次都找到只属于当前区间里面的人的花费的最大值。

如果找不到只属于这段区间的点,那么这段区间的花费为0.

否则就从找到的最大花费的这个人的区间左端点开始往右端点扫。代表在这个时间点去炸死这个人。(因为这个人只存活于这个区间,因此要炸死这个人,必须要在这个区间里面炸)。

#include <bits/stdc++.h>
using namespace std;
#define N 605
const int INF = 0x3f3f3f3f;
struct Node {
int l, r, w;
} p[N];
int dp[N][N], x[N];
int main() {
int t; scanf("%d", &t);
while(t--) {
int n; scanf("%d", &n);
int m = 0;
for(int i = 1; i <= n; i++) {
int l, r, w; scanf("%d%d%d", &l, &r, &w);
p[i] = (Node) { l, r, w };
x[++m] = l; x[++m] = r;
}
sort(x + 1, x + 1 + m);
m = unique(x + 1, x + 1 + m) - x - 1;
for(int i = 1; i <= n; i++) {
p[i].l = lower_bound(x + 1, x + 1 + m, p[i].l) - x;
p[i].r = lower_bound(x + 1, x + 1 + m, p[i].r) - x;
}
// memset(dp, INF, sizeof(dp));
for(int len = 1; len <= m; len++) { // dp[st][ed] 消掉st到ed这段区间的人的花费
for(int st = 1; st <= m - len + 1; st++) {
int ed = st + len - 1, id = 0;
for(int i = 1; i <= n; i++) // 找出花费最大的人,这个人只能在属于自己的这段区间解决掉
if(st <= p[i].l && p[i].r <= ed)
if(id == 0 || p[i].w > p[id].w) id = i;
if(id == 0) { dp[st][ed] = 0; continue; }
dp[st][ed] = INF;
for(int gap = p[id].l; gap <= p[id].r; gap++) // 枚举在哪一点去炸掉这个人最优,因为这个人不能被dp[st][gap-1]到dp[gap+1][ed]的点消除
dp[st][ed] = min(dp[st][gap-1] + dp[gap+1][ed] + p[id].w, dp[st][ed]);
}
}
//for(int i = 1; i <= m; i++)
// for(int j = i; j <= m; j++)
// printf("dp[%d][%d] : %d\n", i, j, dp[i][j]);
printf("%d\n", dp[1][m]);
}
return 0;
}

Codeforces Gym100543L:Outer space invaders(区间DP)的更多相关文章

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

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

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

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

  3. [BZOJ3928/4048]Outer space invaders

    [BZOJ3928/4048]Outer space invaders 题目大意: 有\(n(n\le300)\)个物品,第\(i\)个物品会在\(a_i\sim b_i\)时刻出现,且离你的距离为\ ...

  4. Educational Codeforces Round 61 F 思维 + 区间dp

    https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...

  5. BZOJ3928 [Cerc2014] Outer space invaders

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

  6. Codeforces 508E Arthur and Brackets 区间dp

    Arthur and Brackets 区间dp, dp[ i ][ j ]表示第 i 个括号到第 j 个括号之间的所有括号能不能形成一个合法方案. 然后dp就完事了. #include<bit ...

  7. codeforces 1101F Trucks and Cities 区间dp+单调优化 好题

    题目传送门 题意简述:(来自洛谷) 有n个城市坐落在一条数轴上,第ii个城市位于位置ai​. 城市之间有m辆卡车穿行.每辆卡车有四个参数:si​为起点编号,fi​为终点编号,ci​表示每行驶1个单位长 ...

  8. [CERC2014] Outer space invaders

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

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

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

随机推荐

  1. Matlab随笔之模拟退火算法

    问题描述: 我方有一个基地,经度和纬度为( 70,40).假设我方飞机的速度为 1000 公里/小时. 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地.在敌方每一目 标点的侦察时间不计 ...

  2. JS注册事件

    <html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></title&g ...

  3. 【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?

    原文:[msdn wpf forum翻译]如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点? 原文链接:http://social.msdn.microsoft.com/Fo ...

  4. Java泛型和类型安全的容器

    示例: public class Apple { private static long counter; private final long id = counter++; public long ...

  5. 【python】python调用adb

    本期分享下python如何调用adb: 1.导入os模块 import os 2.python中调用adb命令语法 print("显示机型信息:") os.system('adb ...

  6. WPF ListView 数据懒加载

    实现方式:当滑动条触底时,加载数据 xaml代码: <ListView ScrollViewer.ScrollChanged="ListView_ScrollChanged" ...

  7. awk积累

    1. 计算一个文本中每一列的和 [root@centos ~]# cat aaa.txt [root@centos ~]# awk 'BEGIN{a=0;b=0;c=0}{a+=$1;b+=$2;c+ ...

  8. MIPS虚拟机代码

    http://download.eeworld.com.cn/download/mamselc/472333http://download.eeworld.com.cn/detail/lamas/36 ...

  9. 开源中国的 IT 公司开源软件整理计划介绍

    直击现场 <HTML开发MacOSApp教程>  http://pan.baidu.com/s/1jG1Q58M 开源中国的 IT 公司开源软件整理计划介绍 oschina 发布于: 20 ...

  10. Dynamic linking is coming to iOS, tvOS, and watchOS ports of Qt in the 5.9 release

    http://blog.qt.io/blog/2017/01/23/qt-5-8-released/ Dynamic linking is coming to iOS, tvOS, and watch ...