第一眼,我勒个去。。。然后看到n ≤ 300的时候就2333了

首先把时间离散化,则对于一个时间的区间,可以知道中间最大的那个一定要被选出来,然后把区间分成左右两份

于是区间DP就好了,注意用左开右开的区间比较方便2333

如果暴力找区间内最大值是O(n3)的,当然st表就是O(n2logn)的了。。。不过st表辣么难蒟蒻根本不会QAQQQ

 1 /**************************************************************
 2     Problem: 3928
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:1820 ms
 7     Memory:2248 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <algorithm>
12
13 using namespace std;
14 const int N = 605;
15 const int inf = 1e9;
16
17 inline int read();
18
19 struct data {
20     int st, ed, h;
21     data(int _s = 0, int _e = 0, int _h = 0) : st(_s), ed(_e), h(_h) {}
22
23     inline void get() {
24         st = read(), ed = read(), h = read();
25     }
26 } a[N];
27
28 int n, tot;
29 int tmp[N], len;
30 int f[N][N];
31
32 int main() {
33     int T, H, i, j, k;
34     T = read();
35     while (T--) {
36         n = read();
37         for (i = 1; i <= n; ++i) {
38             a[i].get();
39             tmp[i * 2 - 1] = a[i].st, tmp[i * 2] = a[i].ed;
40         }
41         sort(tmp + 1, tmp + 2 * n + 1);
42         tot = unique(tmp + 1, tmp + 2 * n + 1) - tmp - 1;
43         for (i = 1; i <= n; ++i) {
44             a[i].st = lower_bound(tmp + 1, tmp + tot + 1, a[i].st) - tmp;
45             a[i].ed = lower_bound(tmp + 1, tmp + tot + 1, a[i].ed) - tmp;
46         }
47         tot += 1;
48         for (len = 0; len <= tot; ++len)
49             for (i = 0; i <= tot - len; ++i) {
50                 j = i + len, H = -1;
51                 for (k = 1; k <= n; ++k)
52                     if (i < a[k].st && a[k].ed < j && (H == -1 || a[H].h < a[k].h)) H = k;
53                 if (H == -1) f[i][j] = 0;
54                 else for (f[i][j] = inf, k = a[H].st; k <= a[H].ed; ++k)
55                     f[i][j] = min(f[i][j], a[H].h + f[i][k] + f[k][j]);
56             }
57         printf("%d\n", f[0][tot]);
58     }
59     return 0;
60 }
61
62 inline int read() {
63     static int x;
64     static char ch;
65     x = 0, ch = getchar();
66     while (ch < '0' || '9' < ch)
67         ch = getchar();
68     while ('0' <= ch && ch <= '9') {
69         x = x * 10 + ch - '0';
70         ch = getchar();
71     }
72     return x;
73 }

View Code

转载于:https://www.cnblogs.com/rausen/p/4439368.html

BZOJ3928 [Cerc2014] Outer space invaders相关推荐

  1. [BZOJ3928/4048]Outer space invaders

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

  2. Cerc2014 Outer space invaders

    Cerc2014 Outer spaceinvaders 有N个外星人,第i个外星人会在ai时间出现,离你距离di,并且必须在bi时间之前被消灭.你有一把很NB的武器,攻击范围是个半径为R的圆,R可以 ...

  3. bzoj 3928: [Cerc2014] Outer space invaders

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

  4. 题解 P4766 【[CERC2014]Outer space invaders】

    link description: 有 nnn 个外星人进攻,第 iii 个进攻的外星人会在时间 aia_iai​ 出现,距离你的距离为 did_idi​ ,它必须在时间 bib_ibi​ 前被消灭, ...

  5. [CERC2014] Outer space invaders

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

  6. 洛谷P4766 [CERC2014]Outer space invaders题解

    https://www.luogu.com.cn/problem/P4766 description: 有 nnn 个外星人进攻,第 iii 个进攻的外星人会在时间 aia_iai​ 出现,距离你的距 ...

  7. P4766 [CERC2014]Outer space invaders

    自行想象传送门 题解 当我们一看到这个题的tag时就知道这是一道区间dp水题 很明显这个区间就是指时间上的区间 我们用dp[i][j]表示时间i~j之间消灭所有的aliens的最小代价 很明显开不下这 ...

  8. P4766 [CERC2014]Outer space invaders(区间dp)

    题意: 题目描述 来自外太空的外星人(最终)入侵了地球.保卫自己,或者解体,被他们同化,或者成为食物.迄今为止,我们无法确定. 外星人遵循已知的攻击模式.有N个外星人进攻,第i个进攻的外星人会在时间a ...

  9. Luogu_P4766 [CERC2014]Outer space invaders【题解】区间DP

    题面:https://www.luogu.org/problem/P4766 非常容易就想到以时间为区间来DP. 但是时间比较大,需要离散化. 转移方程就是: f[l][r]=min(f[l][k-1 ...

最新文章

  1. 绿色数据中心如何提高效率?
  2. Unity3D-RayMarch-几何图元0
  3. 数据导出之sqlserver-导出脚本
  4. python的优点和缺点-python的优点和缺点是什么?
  5. TypeError: BlobBuilder is not a constructor
  6. myeclispse配置自己的jdk和tomcat
  7. Ubuntu18.04安装VMware WorkStation
  8. (JAVA学习笔记) 如何计算2*8效率高(面试题)—— 左移和右移问题。
  9. XSS中JavaScript加密以及Filter bypass
  10. 定位低效率执行SQL
  11. Flink-Java版单词计数(批处理流处理)
  12. MySQL—常用指令总结
  13. 计算机打不出汉字怎么办,电脑打不出字怎么办,教您电脑打不出字怎么解决
  14. [转载] Python repr() 函数
  15. r语言 小树转化百分数_魅力语言小课堂|绕口令《说日》
  16. 手机同步查看html,手机版同步html几点注意使用
  17. MacOS Monterey 12.3.1(21E258) OC 0.7.9 / Cl 5145 / PE 三分区原版黑苹果镜像
  18. 【数学】指数函数与对数函数的导数证明
  19. 喜大普奔:史上最全的报表模板库免费用!
  20. CentOS Docker使用ELK监听日志

热门文章

  1. 01 svn服务搭建
  2. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理...
  3. RobotFramework Library
  4. 思考、学习新技术的原则和方式
  5. IE10兼容性故障的解决办法
  6. dos批处理命令详解(转)
  7. 怎么让打印出来表格的纸下面显示页数_4个使用频率较高的Excel打印技巧,办公室打印文件时常常会用到!...
  8. 文本框的值默认显示文本域上_13.4.4 键盘与文本事件
  9. 比较好用的python编译器_比酷传播
  10. 搭建CentOS7.6容器镜像