link

description:

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

你的武器是一个区域冲击波器,可以设置任何给定的功率。如果被设置了功率 RRR,它会瞬间摧毁与你的距离在 RRR 以内的所有外星人(可以等于),同时它也会消耗 RRR 单位的燃料电池。(个人注解:这个冲击波是瞬时的。)

求摧毁所有外星人的最低成本(消耗多少燃料电池),同时保证自己的生命安全。

solution:

这道题我们可以考虑区间dp。

设 f[l][r]f[l][r]f[l][r] 表示在 [l,r][l,r][l,r] 上最低的成本。

但是我们发现,坐标的范围达到了 1e41e41e4,这就意味着数组也会开得较大。我们不妨离散化一下。(因为 nnn 较小)

然后考虑如何转移。

发现对于一段时间区间,我们可以贪心的消去最远的外星人,这样浪费就少。

于是,我们以最远的外星人为转移契机:

f[l][r]=f[l][k−1]+f[k+1][r]+d[tag](a[tag]≤k≤b[tag])f[l][r]=f[l][k-1]+f[k+1][r]+d[tag](a[tag]\leq k\leq b[tag])f[l][r]=f[l][k−1]+f[k+1][r]+d[tag](a[tag]≤k≤b[tag]),其中 tagtagtag 为该段时间内最远的外星人的序号。

#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
map<int,int>mp;
int f[705][705];//f[l][r]表示[l,r]这段时间所需的花费。
int a[1005],b[1005],d[1005];
int main()
{int T;scanf("%d",&T);while(T--){memset(f,0,sizeof(f));for(int i=1;i<=10000;i++)mp.clear();int n,cnt=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d%d",&a[i],&b[i],&d[i]);mp[a[i]]=1;//离散mp[b[i]]=1;}for(int i=1;i<=10000;i++){if(mp[i]==1){mp[i]=++cnt;//重新编号}  }for(int i=1;i<=n;i++){a[i]=mp[a[i]];//赋值编排b[i]=mp[b[i]];}for(int len=1;len<cnt;len++)//众所周知,区间dp的第一层循环要先枚举区间的长度。{//printf("test\n");for(int i=1;i+len<=cnt;i++)//接着是区间的起始点。{// printf("Test2\n");int j=i+len;f[i][j]=1000000000;int tag,ans=0;for(int k=1;k<=n;k++){//printf("Test3\n");if(a[k]>=i&&b[k]<=j&&d[k]>ans)//寻找最大的外星人。{ans=d[k];tag=k;}}if(ans==0){f[i][j]=0;continue;}for(int k=a[tag];k<=b[tag];k++)//在这个最大的外星人的安全时间内的区间都可以如此合并。f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+ans);}} printf("%d\n",f[1][cnt]);}return 0;
}

题解 P4766 【[CERC2014]Outer space invaders】相关推荐

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

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

  2. P4766 [CERC2014]Outer space invaders

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

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

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

  4. P4766 [CERC2014]Outer space invaders——思维+区间dp

    题目传送门 思路 这道题思维的转换真的很妙,第 i 个外星人出现的时间区间是 [ai,bi][a_i,b_i][ai​,bi​] ,距离为 did_idi​ , 我们可以以时间区间为横坐标,距离区间为 ...

  5. Cerc2014 Outer space invaders

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

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

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

  7. 【Luogu P4766】 [CERC2014]Outer space invaders(区间dp)

    目录 题目 题目描述 输入格式 输出格式 输入输出样例 思路 代码 题目 题目描述 来自外太空的外星人(最终)入侵了地球.保卫自己,或者解体,被他们同化,或者成为食物.迄今为止,我们无法确定. 外星人 ...

  8. bzoj 3928: [Cerc2014] Outer space invaders

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

  9. BZOJ3928 [Cerc2014] Outer space invaders

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

最新文章

  1. centos7 lvm管理 把/home空间转移给/
  2. linux 中文输入法 xshall,Centos6.7下安装ibus中文输入法
  3. 论坛报名 | 智能体系架构与芯片的下一个十年
  4. Linux系统运行级别
  5. SPOJ 220 Relevant Phrases of Annihilation(后缀数组+二分答案)
  6. web下拉列表代码_文章列表总结(一)
  7. shell sed 替代1
  8. HDU 4301 Divide Chocolate
  9. token详解及常见防范措施
  10. tensorflow中slim模块api介绍
  11. 2021年信息学部物联网工程学院学生科协第一次Office大培训
  12. 被逼无奈,沉默寡言的程序员也开始露脸拍视频了
  13. matlab 混沌_释放混沌猴子
  14. 初始vue脚手架的项目文件中mian.js文件
  15. 游园惊梦--记游第九届软博会
  16. walking机器人仿真教程-查看仿真环境相关话题
  17. 部落冲突-建筑大师基地军队建筑介绍(兵营、建筑大师训练营、星空实验室、战争机器)
  18. 最最最最能测出你数通hcia基础扎不扎实的实验!速速行动!
  19. 49.SQLite 数据库 编程
  20. forEach的自动序号

热门文章

  1. Qt 调用echo命令写文件失效
  2. ts重点学习72-implement语句
  3. mysql数据库员工表创建_mysql数据库简单练习(创建表格,增删改查数据)
  4. 【ssh出错】Unable to negotiate with XXX: Their offer: ssh-rsa
  5. mybatis 向DB2数据库插入自增长的SQL语句报:DB2 SQL Error: SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID, DRIVER=4.16.53
  6. java大数类阶乘_Java中的大数阶乘
  7. 记录一下一个大专学历大三学生出来找u3d实习工作,这几天的面试经历
  8. 【MySQL】MySQL 的连接(内、左、右、全)
  9. Unity url编码
  10. 数据库与文件的数据存储的区别