https://ac.nowcoder.com/acm/contest/11253/G

上面出题人给的题解:

思路基本差不多,这里主要说一下合并小区间的dp,

dp[i][j]代表前i个分成j组最大的时间max

我们首先将区间排好序,如果满足a[k]>b[i] ,则有

j都是由j-1转移过来的,所以可以用滚动数组优化一维空间(不优化也能过吧);

每次更新的时候,我们都要寻找所以a[k]>b[i]值,因为b[i]其实是排序好的,我们可以用单调队列来优化,然后对于每次转移我们需要找最大的转移,然后根据转移公式,我们发现dp[i-1][j-1]+b[i]更大的那个是更优的,那我们可以根据单调性可以用队尾弹出一下没意愿存的点(如果前面的点dp[i-1][j-1]+b[i]比后面的点小,那就是没意义的)。

代码有注释

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#include <list>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define sc second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<ll,ll> pii;
int dx[8]= {-1,1,0,0,1,1,-1,-1},dy[8]= {0,0,1,-1,-1,1,-1,1};
const ll mod=998244353;
const ll N =1e6+10;
const ll M =250000;
const double eps = 1e-4;
//const double pi=acos(-1);
ll re(){ll x;scanf("%lld",&x);return x;}
ll qk(ll a,ll b){ll ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b/=2;}return ans;}
inline int read(){int sgn = 1; int sum = 0;char ch = getchar();while (ch < '0' || ch > '9') {if(ch == '-')   sgn = -sgn;ch = getchar();}while ('0' <= ch && ch <= '9') {sum = sum*10+(ch-'0');ch = getchar();}return sgn*sum;}ll n,k;
ll dp[2][5500];
pii a[5500];
ll sum[5500];
void sovle(){cin>>n>>k;for(ll i=1;i<=n;i++) cin>>a[i].fi>>a[i].sc;sort(a+1,a+1+n);vector<ll> big;ll cnt=0;vector<pii> b;for(ll i=1;i<=n;i++){while(b.size()&&b.back().sc>=a[i].sc){//处理大区间big.pb(b.back().sc-b.back().fi);b.pop_back();}b.pb(a[i]);}for(pii v:b){//小区间a[++cnt]=v;}sort(all(big),greater<ll>());for(ll i=0;i<big.size();i++){//大区间前缀和sum[i+1]=sum[i]+big[i];}ll m=big.size();n=cnt;FILL(dp,-inf);dp[0][0]=0;//初始化ll ans=0;for(ll i=1;i<=k;i++){deque<ll> q;FILL(dp[1],-inf);for(ll j=1;j<=n;j++){while(q.size()&&dp[0][q.back()-1]+a[q.back()].sc<dp[0][j-1]+a[j].sc){q.pop_back();}//单调队列优化q.push_back(j);while(q.size()&&a[q[0]].sc<=a[j].fi) q.pop_front();//单调队列优化dp[1][j]=dp[0][q[0]-1]+a[q[0]].sc-a[j].fi;//状态转移}swap(dp[0],dp[1]);//优化空间if(m>=k-i){ans=max(ans,dp[0][n]+sum[k-i]);}}cout<<ans<<endl;
}int main()
{iosint t=1;while(t--){sovle();}return 0;
}

牛客第二场 G.League of Legends-单调队列优化dp相关推荐

  1. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  2. 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)

    题目链接:P4544 [USACO10NOV]Buying Feed G 建议做这题前先做下这题P1886 滑动窗口 /[模板]单调队列 我们可以用dp[i][j]表示当前走到前i个点,已经买了j吨饲 ...

  3. 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)

    F-Robots 第一种第二种机器人直接O(n)O(n)O(n)判断即可. 第三种机器人暴力dp,用bitset优化. bitset<250005> b[i][j] 表示从(i,j)(i, ...

  4. 2017 杭电多校联赛第二场 1003 Maximum Sequence(单调队列)HDU 6047

    Maximum Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 2021牛客暑期多校训练营2 G.League of Legends(转化+单调队列)

    G.League of Legends Zechariah_2001题解 对于可以包含其他区间的大区间,要使得答案最优无非就是两种分组方式:单独一组或者与被包含的区间一组.单独一组那么贡献就是区间长度 ...

  6. ICPC网络赛第二场G Limit

    ICPC网络赛第二场G Limit 题意: 给你数组a和b,求解: 1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.1≤n≤100000,−100≤a_{i},b_{i}≤100,0≤ ...

  7. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  8. 牛客竞赛语法入门班数组栈、队列和stl习题

    牛客竞赛语法入门班数组栈.队列和stl习题 L 指纹锁 set ,自带排序功能 可重写排序函数 cmp,注意外边写的要写成 operator()operator()operator(),结构体内部的排 ...

  9. 牛客小白月赛 G 异或 找规律

    链接:https://www.nowcoder.com/acm/contest/135/G 来源:牛客网 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apo ...

最新文章

  1. 计算机三级考试在线免费题库,国家三级计算机考试题库.docx
  2. Python开发面试题及部分答案分享!
  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
  4. H5——while循环,for循环
  5. 额尔古纳的俄罗斯女孩
  6. NLog-ASP.NET Core 5入门
  7. 小程序类似抖音视频整屏切换
  8. 遍历输出所有子视图(View)
  9. dataset.filter
  10. python的数据库_python数据库操作-mysql数据库
  11. 港中文等提出:开放世界实体分割
  12. 高品质美食PSD分层海报,吸睛有食欲
  13. Java设计模式-代理模式
  14. golang的图片操作:缩放图片+合成图片
  15. 京东商品列表API接口-(item_search-按关键字搜索京东商品API接口),京东API接口
  16. CMakeLists.txt链接库的基本套路
  17. 机器学习(七)音频可视化第一篇
  18. Unity 自定义Image形状
  19. Maperitive地图瓦片切割部分使用方法总结
  20. Echarts调整X轴字体大小

热门文章

  1. 老娘不就是没化妆吗?你几个意思?
  2. 私房钱就藏在老婆眼皮底下
  3. 全校师生放6天春假;清华大学设立天文系;郭守敬望远镜光谱数突破千万;《自然》发表最新发现;百度败诉需道歉;这就是今天的大新闻...
  4. linux 系统迁移到固态硬盘,把Debian GNU/Linux迁移到SSD上
  5. a标签传参接收_[pyecharts1.8] 系列配置之标签设置
  6. 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
  7. python与matlab混合编程_python 与 matlab 混编
  8. android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)
  9. node.js require 自动执行脚本 并生成html,nodejs 执行脚本并实时输出
  10. python转字符_python 字符转换