Codeforces 1106 E. Lunar New Year and Red Envelopes 优先队列+dp
题意大致是Bob新年拿红包,每个红包可以在s-t时间内取,但是取了之后得在d+1时间开始才能继续取红包。
同时他女儿能在m个时间点阻止他取红包,求女儿阻止后Bob取得的w总和最小值。
Bob取红包的策略是固定的,有红包就一定取,有多个就取w最大的,仍然有多个就取d最大的。
这个题意读了半天,不得不感叹Bob他孩子真是亲生的,都是傻子ww。
这个题首先第一感觉就是个典型的dp,但是想了想觉得女儿的阻止操作会影响后续当时状态的红包状态,纠结了半天。
但是其实我们可以发现,首先Bob的操作本来应该是固定的,每个时间红包状态显然也是固定的。
Bob的女儿的影响其实是不会改变每个时间取的红包,取了红包后转移到d+1时刻,而被阻止了取红包是转移到now+1时刻。
所以说,我们只要在每个时刻用优先队列得到当时根据Bob策略要取的红包,直接进行转移即可。
#include<bits/stdc++.h>
using namespace std;
int i,i0,n,m,k;
long long dp[100005][205];
struct node
{
int s,t,d,w;
}a[100005];
bool cmp(node a,node b){return a.s<b.s;}
struct cmp0{
bool operator()(node a,node b)
{
if(a.w==b.w)return a.d<b.d;
return a.w<b.w;}
};
priority_queue<node,vector<node>,cmp0>q;
int main()
{
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=k;i++)scanf("%d %d %d %d",&a[i].s,&a[i].t,&a[i].d,&a[i].w);
sort(a+1,a+1+k,cmp);
for(i=2;i<=n+1;i++)for(i0=0;i0<=m;i0++)dp[i][i0]=(long long)INT_MAX*INT_MAX/2;
for(i=1,i0=1;i<=n;i++)
{
while(i0<=k&&a[i0].s==i)q.push(a[i0++]);
while(!q.empty()&&q.top().t<i)q.pop();
if(q.empty())
{
for(int i1=0;i1<=m;i1++)dp[i+1][i1]=min(dp[i+1][i1],dp[i][i1]);
}
else
{
for(int i1=0;i1<=m;i1++)dp[q.top().d+1][i1]=min(dp[q.top().d+1][i1],dp[i][i1]+q.top().w);
for(int i1=0;i1<m;i1++)dp[i+1][i1+1]=min(dp[i+1][i1+1],dp[i][i1]);
}
}
long long ans=(long long)INT_MAX*INT_MAX/2;
for(i=0;i<=m;i++)ans=min(ans,dp[n+1][i]);
printf("%lld\n",ans);
return 0;
}
Codeforces 1106 E. Lunar New Year and Red Envelopes 优先队列+dp的更多相关文章
- Codeforces 1106E. Lunar New Year and Red Envelopes(DP)
E. Lunar New Year and Red Envelopes 题意: 在长度为n的时间轴上,有k个红包,每个红包有领取时间段[s,t],价值w,以及领了个这个红包之后,在时间d到来之前无法再 ...
- 【Codeforces 1106E】 Lunar New Year and Red Envelopes
Codeforces 1106 E 题意:有\(k\)个红包,第\(i\)个红包可以在\(s_i\)到\(t_i\)的时间内抢,同时获得\(w_i\)的钱,但是抢完以后一直到\(d_i\)都不可以继续 ...
- 【Codeforces 1106E】Lunar New Year and Red Envelopes
[链接] 我是链接,点我呀:) [题意] 给你k个红包,每个红包可以在si..ti的时间范围内拿走. 抢完红包之后你得到wi元,然后你需要在di+1时刻才能继续抢红包 时间是线性的从1..n 然后某个 ...
- CF - 1106 E Lunar New Year and Red Envelopes DP
题目传送门 题解: 首先要处理出每个时间点会选择哪一个线段. 对于这个问题,可以用multiset去维护信息. 当时间线开始的时候,往mutiset里面插入这个信息,当时间线结束的时候,删除这个信息. ...
- Lunar New Year and Red Envelopes CodeForces - 1106E (dp)
大意: 总共$n$的时间, $k$个红包, 红包$i$只能在时间$[s_i,t_i]$范围内拿, 并且拿完后时间跳到$d_i+1$,Bob采用贪心策略,每个时间点若有红包能取则取钱数$w_i$最大的, ...
- Codeforces #536 div2 E (1106E)Lunar New Year and Red Envelopes (DP)
题意:过年了,Bob要抢红包.抢红包的时间段为1 - n,有m个红包,每个红包有三个属性:st(红包出现的时间), ed(红包消失的时间),d(如果抢了这个红包,能够抢下一个红包的时间),w(红包的收 ...
- Codeforces Round #536 E. Lunar New Year and Red Envelopes /// 贪心 记忆化搜索 multiset取最大项
题目大意: 给定n m k:(1≤n≤1e5, 0≤m≤200, 1≤k≤1e5) 表示n个时间长度内 最多被打扰m次 k个红包 接下来k行描述红包 s t d w:(1≤s≤t≤d≤n , 1≤w≤ ...
- CF1106E Lunar New Year and Red Envelopes
比赛时看到这题懵逼了,比完赛仔细一想是个很简单的dp = = 由于题目限制,可以发现\(B\)取红包的策略是唯一的,可以用优先队列预处理出\(B\)在第\(i\)秒可以拿到的红包的收益\(w_i\)和 ...
- codeforces 1106 E
显然是dp啊,dp[i][j]表示到时间i打扰了j次的最小收益 显然要排序,官方题解说set没看懂,优先队列就行啊. 按照时间排序,显然这样扫的话可以保证当前时间点的点在优先队列里吧, 然后有打断和不 ...
随机推荐
- 师范大学 e: skyscrapers
#include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> usi ...
- spring 中 InitializingBean 接口使用理解
前言:这两天在看 spring 与 quart 的集成,所以了解到 spring 是如何初始化 org.springframework.scheduling.quartz.SchedulerFacto ...
- vue+element ui 的时间控件选择 年月日时分
前言:工作中用到 vue+element ui 的前端框架,需要选择年月日时分,但element ui官网demo有没有,所以记录一下.转载请注明出处:https://www.cnblogs.com/ ...
- Spring boot 入门三:SpringBoot用JdbcTemplates访问Mysql 实现增删改查
建表脚本 -- create table `account`DROP TABLE `account` IF EXISTSCREATE TABLE `account` ( `id` int(11) NO ...
- 【PyQt5 学习记录】009:批量创建组件并查找
这里需要在创建组件时使用 setObjectName() 为其添加 objectName 属性,再通过 findChild() 或者 findChildren() 函数来查找. 举个栗子,批量创建10 ...
- 宝塔面板nginx配置安装Discuz
Discuz!在Nginx下的Rewrite 需要说明的是,下网上以前一直流传的Rewrite都是有误的. 下面的Rewrite中百分号前面多了个转移字符"",这在Apache中是 ...
- ES6新语法之let关键字;有别于传统关键字var的使用
ES6新语法于2015年发布:而我这个前端小白在17年才接触到.惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好.不过既然人家ES6已经出来了,还是要跟上技术的潮 ...
- Android Fragment功能的例子
实现的功能很简单,也是最基本的,上下分别是两个Fragment,上面的Fragment中是一个listview,当点击item时,下面的Fragment显示对应的文字详细信息 具体的实现步骤如下:①创 ...
- Vue 框架-04-计算属性
Vue 框架-04-计算属性 计算属性是什么? 大家可以去看官网解释:计算属性和侦听器 今天的第一个小实例: 为啥先放折磨一个实例,之前数据绑定的就已经可以实现了,看起来那么简单,就是为了告诉大家,当 ...
- 2java.lang.NoClassDefFoundError异常
1.错误信息 2.错误分析: JVM读到程序的第三行,会在当前路径 "D:\java" 下寻找com.yangquan.aolun这个包路径下的Cat类,但当前路径下根本就没有co ...