有N个外星人,第i个外星人会在ai时间出现,离你距离di,并且必须在bi时间之前被消灭。你有一把很NB的武器,攻击范围是个半径为R的圆,R可以任意调整,不过你以R的范围每攻击一次就要消耗R单位能量。外星人被攻击一次就会死掉。求需要消灭所有外星人的最小消耗能量。

dp[i][j] = min(dp[i][j], c[h]+ f[i][k] + f[k][j])(a[h]<=k<=b[h]) (i,j)是开区间,h是i秒到j秒里出现的di最大的外星人的下标,分割点肯定在这个外星人出现的某个时间点k。

#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define bb 1000000009
#define ll long long
using namespace std;
int dp[650][650];
struct node{int a,b,c;
}x[310];
int y[650];
int main(){int t;scanf("%d", &t);while(t--){int n;scanf("%d", &n);int c=-1;for(int i=0;i<n;++i){scanf("%d%d%d",&x[i].a,&x[i].b,&x[i].c);  y[++c]=x[i].a;y[++c]=x[i].b;}y[++c]=-100000000,y[++c]=100000000;//由于dp[i][j]是开区间 sort(y,y+c+1);int g=unique(y,y+c+1)-y;for(int k=1;k<g;++k){for(int i=0;i<g-k;++i){int j=i+k;int maxx=0,s=-1;for(int l=0;l<n;++l){if(x[l].a>y[i]&&x[l].b<y[j]){if(x[l].c>maxx)maxx=x[l].c,s=l;  //找出这个区间的最大值 } } if(s==-1){dp[i][j]=0;continue;} dp[i][j]=100000000;int l=lower_bound(y,y+g,x[s].a)-y;  int r=lower_bound(y,y+g,x[s].b)-y;  for(int h=l;h<=r;++h){dp[i][j]=min(dp[i][j],dp[i][h]+dp[h][j]+x[s].c);}}}printf("%d\n", dp[0][g-1]);  }return 0;
} 

CERC2014 Outer spaceinvaders(区间DP,推理)相关推荐

  1. Cerc2014 Outer space invaders

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

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

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

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

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

  4. P3205 [HNOI2010]合唱队 (区间dp)

    [HNOI2010]合唱队 - 洛谷 分析: 根据题意我们发现,小a每次排队的时候,会出现两种情况 当前排入的人比初始队列中前一个人矮,排到最左边 当前排入的人比初始队列中前一个人高,排到最右边 现在 ...

  5. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  6. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  7. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  8. UVA10003 切木棍 Cutting Sticks(区间DP、细节)

    整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...

  9. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

最新文章

  1. 实战 | 如何将YOLOv4部署到无人机?
  2. Android Gradle 自定义Task 详解
  3. 数据结构与算法之花费铜板最小和利润最大题目
  4. 在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法
  5. 线程中如何使用对象_多线程中如何使用gdb精确定位死锁问题
  6. deepin中mysql数据库的连接_教你如何典雅的用Python连接MySQL数据库
  7. python threading-单线程 多线程 主线程 子线程 setDeamon join
  8. SkyEye实现工业安全关键领域基础软件国产替代
  9. 程序员最新研究发现【西安楼市 2011 低迷收场】
  10. 近期计算机视觉相关算法竞赛汇总—总奖池超553万人民币
  11. unix/mac/dos-windows三种文本文件的格式的行尾区别
  12. TypeScript学习笔记(第一天)------创建简单的web应用
  13. [导入]C#做的一个加密/解密的类
  14. vivox50支持鸿蒙,【vivoX50Pro评测】轻薄机身内大有玄妙 深挖vivo X50系列技术创新-中关村在线...
  15. 青少年计算机编程赛,青少年编程竞赛汇总
  16. amoeba启动报错
  17. 什么是服务器?服务器是干什么用的?
  18. Etcher 改变一个选项,让所有盘符都乖乖出来
  19. 格式化GridView 数字0和1转换为男女 及更复杂的处理
  20. 盘复分支语句和循环语句的那些知识

热门文章

  1. UUNITY3D插件InControl的简单使用_安卓端连接蓝牙手柄
  2. 苹果IWatch真香,包邮送一个!
  3. 小数乘以100后精度丢失
  4. 从新建文件夹开始构建ShadowPlay Engine游戏引擎(3)
  5. android 如何制作可编辑的表格,在手机wps中编辑表格的方法
  6. 1. webpack 和 webpack-cli
  7. codemirror 5.2版本实现自定义提示
  8. java cms 开源系统_基于Java的开源CMS系统选择
  9. C语言知识点汇总之一(全)
  10. 流浪的阿猫阿狗我要怎么帮助你?