原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543L.html

题目传送门 - CF-Gym100543L

题意

  $T$ 组数据。

  有 $n$ 个外星人,第 $i$ 个外星人将在 $a_i$~$b_i$ 这段时间内出现,距离你 $d_i$ 。

  任何时刻,你可以使用 $R$ 点能量将距离你不超过 $R$ 的所有外星人全部打死。

  问你最少使用能量才能干掉所有外星人。

  $n\leq 300,\ \ \ \ 1\leq a_i\leq b_i\leq 10000, \ \ \ \ 1\leq d_i\leq 10000$

题解

  首先闭着眼睛离散化一下。

  考虑优先策划打掉距离你最远的外星人。

  你可以在他出现时间的任意一个时间点里打他。

  打完他之后,所有出现时间包含你打的时间点的外星人都被顺手打掉了。

  于是剩下的问题转化成了两个子问题:打掉所有出现、消失时间都早于你打的时间点的外星人;打掉所有出现、消失时间都晚于你打的时间点的外星人。

  于是我们可以区间dp。

  建议写记忆化搜索,比较好写。

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

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=605;
int T,n;
struct Alian{
int L,R,v;
}a[N];
struct Hash_Table{
int Ha[N],hs;
void clear(){hs=0;}
void push(int x){Ha[++hs]=x;}
void HASH(){
sort(Ha+1,Ha+hs+1);
int _hs=1;
for (int i=2;i<=hs;i++)
if (Ha[i]!=Ha[i-1])
Ha[++_hs]=Ha[i];
hs=_hs;
}
int find(int x){return lower_bound(Ha+1,Ha+hs+1,x)-Ha;}
}h;
int dp[N][N];
int solve(int L,int R){
if (~dp[L][R])
return dp[L][R];
int Max=-1;
for (int i=1;i<=n;i++)
if (L<=a[i].L&&a[i].R<=R)
if (Max==-1||a[i].v>a[Max].v)
Max=i;
if (!~Max)
return dp[L][R]=0;
dp[L][R]=1e9;
for (int i=a[Max].L;i<=a[Max].R;i++)
dp[L][R]=min(dp[L][R],a[Max].v+solve(L,i-1)+solve(i+1,R));
return dp[L][R];
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%d",&n);
h.clear();
for (int i=1;i<=n;i++){
scanf("%d%d%d",&a[i].L,&a[i].R,&a[i].v);
h.push(a[i].L);
h.push(a[i].R);
}
h.HASH();
for (int i=1;i<=n;i++){
a[i].L=h.find(a[i].L);
a[i].R=h.find(a[i].R);
}
memset(dp,-1,sizeof dp);
printf("%d\n",solve(1,h.hs));
}
return 0;
}

  

最新文章

  1. ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能
  2. Java中2+2==5解读
  3. git 忽略提交某个指定的文件(不从版本库中删除)
  4. 一张关于docker版本的图
  5. 尚学堂Spring视频教程(七):AOP XML
  6. NYOJ题目111分数加减法
  7. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型
  8. HDU-2196 Computer (树形DP)
  9. VS2013 越来越慢
  10. 为laravel5.1生产环境linux从源代码安装PHP
  11. 【阿里云产品评测】小站长眼中的巅峰云PK
  12. Python抓取淘宝IP地址数据
  13. perf---LINUX内核研究
  14. servletContext百科
  15. FastDFS与Nginx的配置说明
  16. LightOJ1336 Sigma Function
  17. 【iOS】swift 枚举
  18. jenkins 构建完毕后接着构建另外一个构建的方法
  19. 细说MySQL表操作
  20. linux 命令 — sort、uniq

热门文章

  1. POJ 1305
  2. String类型作为方法的形参
  3. bootstrap的treeview使用方法
  4. ie.360,qq浏览器这种ie内核浏览器默认阻止弹窗
  5. 最近Android真的凉凉了?
  6. setenforce: SELinux is disabled解决办法
  7. 【Linux】系统基本命令
  8. flutter No material widget found textfield widgets require a material widget ancestor
  9. java多线程快速入门(二十)
  10. 字符串为空的比较 ==与equals() 区别(キ`゚Д゚&#180;)!!基础很重要 !!!