首页 > 其他分享 >[CERC2014] Outer space invaders

[CERC2014] Outer space invaders

时间:2023-10-20 16:26:17浏览次数:29  
标签:Outer 题目 合并 invaders CERC2014 啊啊啊 区间 操作 dp

题目描述

The aliens from outer space have (finally!) invaded Earth. Defend yourself, or be disintegrated!

Or assimilated. Or eaten. We are not yet sure.

The aliens follow a known attack pattern. There are nn attackers, the i−thi−th one appears at time aiai​, at distance didi​ from you. He must be destroyed no later than at time bibi​, or else he will fire his weapon, which will definitely end the fight.

Your weapon is an area-blaster, which can be set to any given power. If fired with power RR,it momentarily destroys all aliens at distance RR or smaller. It also consumes RR fuel cells.

Determine the minimal cost (measured in fuel cells) of destroying all the aliens, without being killed.

输入格式

The first line of input contains the number of test cases TT. The descriptions of the test cases follow:

Each test case starts with a line containing the number of aliens n(1≤n≤300)n(1≤n≤300). Of the next nn lines, the i−thi−th one contains three integers ai,bi,di,(1≤ai<bi≤10000,1≤di≤10000)ai​,bi​,di​,(1≤ai​<bi​≤10000,1≤di​≤10000).

The i−thi−th alien appears at time aiai​, is idle until bibi​, and his distance from you is didi​.

输出格式

For each test case, output one line containing the minimum number of cells needed to destroy all the aliens.

题意翻译

题目描述

来自外太空的外星人(最终)入侵了地球。保卫自己,或者解体,被他们同化,或者成为食物。迄今为止,我们无法确定。

外星人遵循已知的攻击模式。有 NN 个外星人进攻,第 ii 个进攻的外星人会在时间 aiai​ 出现,距离你的距离为 didi​,它必须在时间 bibi​ 前被消灭,否则被消灭的会是你。

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

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

输入格式

第一行输入一个数 TT,表示有 TT 组数据。

每组数据的第一行为外星人的数量 nn(1≤n≤3001≤n≤300)。

接下来 nn 行,每行有三个数 ai,bi,diai​,bi​,di​,表示这个外星人在时间 aiai​ 出现,距离你 didi​,在 bibi​ 前时刻死亡。

输出格式

共 TT 行,每行输出摧毁所有外星人的最低成本。

输入输出样例

输入 #1
1
3
1 4 4
4 7 5
3 4 7
输出 #1
7

和我上篇博客里面讲的dp是一种
先讲讲怎么做,再分析一下这类题目的特点和套路吧

首先看到这题目,就很明显是一个dp
线性的dp是很明显完全不可以的,没有特殊处理的状态是完全处理不了这种区间操作的后效性的

还是之前所说的,dp状态的设计要使在这个状态上的情况能够相互比较来选择出现在优秀,并且之后也优秀的情况
我们要设计一种状态,让不同情况在满足某些要求的时候能够公平的相互比较

(我念叨这些其实是因为我不知道怎么样来解释怎么想到这种状态设计。。。
等等。。我理清一下思路

首先,这题的一个麻烦之处在于,我们只是有一个时间区间的限制,我们只需要在这个区间内将其解决就好
可以很轻松的想到,每一次的击杀操作应该都是一个决策点
或者说是,我们的每一次击杀操作都是决策得到的

那我们转移的时候肯定是有一重循环在枚举什么时候击杀吧
我们发现我们的后效性是在时间维度上的,那我们就以时间维度来进行区间dp,就能够解决这种后效性了
这其实更趋近是一种感觉。。我在没有看题解的时候,否定了线性dp之后就很自然的想到了区间dp。。。
因为写了一些题目之后,应该是能够认识到区间dp其实就是一种处理后效性的方法吧?
但是转移并不是普通的方法,这是区间dp的另一类,或者说是一种进阶

设f[i][j]表示解决了出现时间和结束时间都在[i,j]之中的敌人所消耗的最小的能量和
但是转移很明显不是枚举断点这么简单
对于一个满足i<=k<=j的k,f[i][k]+f[k+1][j]和f[i][j]之间的差距在于那些出现时间在k的左边,消灭时间在k的右边的敌人,消灭他们既没有被f[i][k]完成,也没有被f[k+1][j]完成
所以我们只需要在k点完成这个击杀操作就好了

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
讲的好烂好烂
我感觉我理解之后为什么讲不出来我的思考过程了啊啊啊啊啊啊啊啊啊
好烦好烦好烦
哭了

 

所以方程就是。。。
算了这个大佬讲的比我好一万倍https://www.cnblogs.com/luckyblock/p/17056671.html


难绷

我就分析一下这个题型吧(给我自己看的罢了

这个题目和我上一篇博客所讲的题目是同一种
他们和石子合并这种传统的区间dp所不一样的地方在于,传统的区间dp的增加代价的操作往往是和区间合并一起发生的
而这一题和上一题的区间合并却似乎是以“最后一次操作”作为区间合并的一种条件,最后一次操作其实就是区间合并的操作,我们所做的就是枚举这个最后的操作发生的位置,然后以这位置作为断点来合并区间,转移状态
这个最后一次操作,可以说是消除了这两个区间之间被划分为两个区间的原因,从而变为一个区间
这一题是这样,上一题也是这样
上一题中,我们寻找的是最优的解,所以在对一个区间的转移全部完成后,我们需要保证这个区间对于的dp数组里面存放的一定是最优秀的解,而我们寻找一个贡献最大的奶牛,吃掉中间的派的操作,其实就是维护了最优解
很容易的可以证明,在我们这样对这个区间操作后,这里最后存放的一定是最优解。所以这是一个正确的dp

这两道题目有什么共同点吗?

首先,我们发现,奶牛的吃派是一个区间的操作,而我们击杀敌人也是一个区间的操作,更巧的是,我们枚举的“最后的操作”,在上一题就是奶牛吃派,在这一题里面就是击杀敌人
很明显这不是巧合,这里引用一句在网上看到的dalao的话:区间DP的另一大套路就是:当我不好"拆分-合并"的时候,先考虑最后执行的操作,再用这个最后执行的操作把区间分成两部分,可以视作"合并-拆分"。
其实这两题里面的操作就是区间的合并-拆分,这很明显

我们之所以不好合并-拆分,就是因为在我们合并两个区间的时候,其实是有需要满足的条件的,但是之前的基础的区间dp并没有这种东西,所以在之前的我看来,这东西就是不可做的
但是,我们可以把决策的操作加入,也就是上面说的,先考虑最后执行的操作

那我们有没有什么办法来判断这种类型的题目呢?

好难受,这种题目的模型为什么我建不起来
好难受好难受
他们有什么特点?是什么特点使他们必须使用这种办法来求解?
我现在能看到的,就是他们和柿子合并不一样的,他们是真正的区间操作,而柿子合并则是一个区间合并
那只要是区间操作求最优解的题目就能够用这种做法吗?
第二题和第一题的区别其实很大
我们转移时“最后执行的操作”其实是一个能够覆盖整个区间的操作,我们的状态设计使这个操作的影响被限制,没有波及其他区域
这使得后效性被处理
柿子合并没有这种范围的影响

难道特点就是“波及一个给定范围的操作”?
似乎不够
还有
这种操作如果使嗷付出代价的和如果使获得奖励的
这似乎不一样
这两道题目就是不一样的
但是,有一个可以确定的,就是先考虑最后执行的操作

目前我能想到的只有这些了。。

头疼

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read() {
    char c=getchar();int a=0,b=1;
    for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
    for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;return a*b;
}
int T,c[601],f[601][601];
struct node
{
    int a,b,d;
}e[601];
bool mycmp(node a,node b)
{
    if(a.a==b.a)return a.b<b.b;
    return a.a<b.a;
}
int main()
{
    T=read();
    while(T--)
    {
        int n=read(),tot=0;
        map <int,int> m;
        memset(f,0,sizeof(f));
        memset(e,0,sizeof(e));
        memset(c,0,sizeof(c));
        for(int i=1;i<=n;i++)
        {
            e[i].a=read();e[i].b=read();e[i].d=read();
            c[i]=e[i].a;c[i+n]=e[i].b;
            m[c[i]]=0;m[c[i+n]]=0;
        }
        sort(c+1,c+1+n*2);
        for(int i=1;i<=n*2;i++)
        {
            if(m[c[i]]==0)
                m[c[i]]=++tot;
        }
        for(int i=1;i<=n;i++)
        {
            e[i].a=m[e[i].a],e[i].b=m[e[i].b];
        }
        sort(e+1,e+1+n,mycmp);
        for(int i=2;i<=tot;i++)
        {
            for(int j=1;i+j-1<=tot;j++)
            {
                int r=i+j-1,get=0,ans=-1;
                for(int k=1;k<=n;k++)
                {
                    if(e[k].b>r&&e[k].a>r)break;
                    if(e[k].a>=j&&e[k].b<=r)
                    {
                        if(ans<e[k].d)
                        {
                            ans=e[k].d;
                            get=k;
                        }
                    }
                }
                if(ans!=-1)
                {
                    f[j][r]=2147483647;
                    for(int k=e[get].a;k<=e[get].b;k++)
                    {
                        f[j][r]=min(f[j][r],f[j][k-1]+f[k+1][r]+e[get].d);
                    }
                }
                else 
                {
                    f[j][r]=0;
                }
            }
        }
        cout<<f[1][tot]<<endl;
    }
    return 0;
}

 

标签:Outer,题目,合并,invaders,CERC2014,啊啊啊,区间,操作,dp
From: https://www.cnblogs.com/HLZZPawa/p/17777369.html

相关文章

  • import { useRouter } from 'next/router'; 在非hooks 文件或组件中使用
    将 import{useRouter}from'next/router';改为 importRouterfrom"next/router";使用: Router.push('/');原来使用 import{useRouter}from'next/router';会导致报错如下  ......
  • Go 布道者框架beego的Router 功能详解
    Beego是一个用于构建Web应用程序和后端服务的Go语言框架。它提供了一整套功能,包括路由、模型、视图、会话管理等。0go框架beego现在被淘汰了吗?2016年提出的这个问题,由于当时自己刚入门学习go,就想找一个快速入门的框架学习使用,所以提出了这个很无脑的问题,在此,也向框架作者表......
  • vue进行跳转之后出现Cannot read properties of undefined (reading 'router') TypeEr
    问题描述使用router进行页面跳转时,就出现了这样的问题:也就是这里出现了问题:问题解决本来是按照网上的教程:const_this=this;但是,但是,我本来就是用的这种方法呀~然后就打算直接在这个界面引用:importrouterfrom'@/router'router.push('/one');里面引用的跳转页面......
  • python3的模块FastAPI,APIRouter
    FastAPI将依赖项的值从include_router传递给路由FastAPI依赖项和include_router在FastAPI中,依赖项是一种重要的机制,用于处理从请求到响应的整个过程中所需的各种依赖关系,例如数据库连接、身份验证等。依赖项可以被注入到请求处理函数中,并在执行时提供所需的值。在FastAPI中,我......
  • router-link:导航链接 / 声明式导航
    vue-router提供了一个全局组件router-link(取代a标签)router-link本质还是a标签router-link功能:①能跳转,配置to属性指定路径(必须),本质还是a标签,to无需#②能高亮,默认就会提供高亮类名,可以直接设置高亮样式 router-link会自动给当前导航添加两个类名:router-li......
  • vite.config.js base 与 vue-router base
    vite.config.jsbase决定了打包后,资源引用的前缀base:'/hlw/'linkref='/hlw/assets'打包后的dist要放到/hlw路径下base的值与process.env.BASE_URL、import.meta.env.BASE_URL一致vuerouter的base决定了,多页面的访问路径当vite.config.js与router中的base......
  • 使用vue-router添加动态路由时遇到的坑
    在开发后台管理的时候,用户登录时需要根据权限来分配路由,这时候可以在路由守卫里通过router.addRoute()方法动态添加路由。importrouterfrom'./router'importstorefrom'./store'importstoragefrom'@/utils/storage'import{asyncRoute}from"@/router/routers";......
  • Vue-router、localStorange
    Vue-Router的使用作用: 借助于router可以实现单页面组件之间的跳转this.router的一些使用方法:this.$router.push(path):相当于点击路由链接(可以返回到当前路由界面)this.$router.replace(path):用新路由替换当前路由(不可以返回到当前路由界面)this.$router.......
  • vue-router.esm.js:2065 Uncaught (in promise) Error: Redirected when going from "
    原因:  vue-router路由版本更新产生的问题,导致路由跳转失败抛出该错误;真正的原因是由于返回了一个Promise对象,正常的跳转由then方法执行当正常的路由跳转,被"路由导航守卫"拦截并重新指定路由时,由于this.$router.push()返回的是Promise对象,此时then方法不能正常执......
  • vue:路由错误/404 not found([email protected])
     一,官方文档地址: https://router.vuejs.org/zh/guide/essentials/dynamic-matching.html二,代码:1,router配置{path:'/:pathMatch(.*)*',name:'NotFound',meta:{title:"路由未匹配",top:"3"},component:NotFound},2,notfound.vue......