题意:给出N个人,现在让你分P组,每组的工作效率是最小结束时间-最大开始时间,要求每一组的效率的正数,求最大效率和。N<1000

思路: 把包含至少一个其他的分到A组;否则到B组。

A组的要么单独分到一组,要么和它包含的某一个在一组(可以反证,假设已经分好组了,现在把不是单独分组的A加进去,如果分到不是包含关系的里面去,只会把答案变小)。

分组可以用栈进行。 而不是N^2枚举,因为多个相同的时候我们可以要保留一个作为最小的一个分到B组。

然后,现在A里面的没有包含关系了,我们可以排序,排序后一定是相邻的分到同一组,这里DP即可。

枚举单独分组的A,加上dp[][]跟新最大值即可。

原题是N<200的,我们可以用O(N^3)的DP来做。BZOJ上的N是1000的,我们需要优化,这种相邻分组的,估计要四边形不等式优化。果然是有决策单调性的,我们可以用分治来优化。  分P组,我们就P次分治。  然而我wa了N多次,因为我把不合法的部分continue了,事实上,不合法的也要更新,这样的mid才是ok的,不然单调性会出问题。

#include<bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep2(i,a,b) for(int i=b;i>=a;i--)
using namespace std;
const int maxn=;
const int inf=;
pii a[maxn];int tot,cnt,ans=-inf;
int vis[maxn],dp[maxn][maxn],len[maxn],mp[maxn][maxn];
void solve(int p,int L,int R,int l,int r)
{
if(L>R) return ;
int Mid=(L+R)>>,res=-inf,pos=l;
rep2(i,l,min(r,Mid-)){
if(mp[i+][Mid]>&&dp[i][p-]+mp[i+][Mid]>res) {
res=dp[i][p-]+mp[i+][Mid]; pos=i;
}
}
dp[Mid][p]=res;
solve(p,L,Mid-,l,pos);
solve(p,Mid+,R,pos,r);
}
int main()
{
int N,P;
scanf("%d%d",&N,&P);
rep(i,,N) scanf("%d%d",&a[i].first,&a[i].second);
sort(a+,a+N+);
rep(i,,N)
rep(j,i+,N)
if(a[i].second>=a[j].second){ vis[i]=; break;}
rep(i,,N)
if(vis[i]) len[++tot]=a[i].second-a[i].first;
else a[++cnt]=a[i];
sort(len+,len+tot+); reverse(len+,len+tot+);
rep(i,,tot) len[i]+=len[i-]; rep(i,,cnt){
int Mx=a[i].second,Mn=a[i].first;
rep(j,i,cnt){
Mx=min(Mx,a[j].second),Mn=max(Mn,a[j].first);
mp[i][j]=Mx-Mn;
}
} rep(i,,cnt) rep(j,,P) dp[i][j]=-inf;
dp[][]=;
rep(i,,min(P,cnt))
solve(i,i,cnt,,cnt-); rep(i,max(P-cnt,),tot){
if(dp[cnt][P-i]>)
ans=max(ans,len[i]+dp[cnt][P-i]);
} printf("%d\n",ans);
return ;
}

BZOJ4426 :最大生产率(贪心+决策单调性DP)的更多相关文章

  1. luogu P1721 [NOI2016]国王饮水记 斜率优化dp 贪心 决策单调性

    LINK:国王饮水记 看起来很不可做的样子. 但实际上还是需要先考虑贪心. 当k==1的时候 只有一次操作机会.显然可以把那些比第一个位置小的都给扔掉. 然后可以得知剩下序列中的最大值一定会被选择. ...

  2. CF321E Ciel and Gondolas 【决策单调性dp】

    题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val ...

  3. BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】

    题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...

  4. 洛谷 P3515 [ POI 2011 ] Lightning Conductor —— 决策单调性DP

    题目:https://www.luogu.org/problemnew/show/P3515 决策单调性... 参考TJ:https://www.cnblogs.com/CQzhangyu/p/725 ...

  5. LOJ2074/2157 JSOI2016/POI2011 Lightning Conductor 决策单调性DP

    传送门 我们相当于要求出\(f_i = \max\limits_{j=1}^{n} (a_j + \sqrt{|i-j|})\).这个绝对值太烦人了,考虑对于\(i>j\)和\(i<j\) ...

  6. Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分

    有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...

  7. BZOJ1563:[NOI2009]诗人小G(决策单调性DP)

    Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...

  8. 【bzoj4709】[Jsoi2011]柠檬 决策单调性+dp

    Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...

  9. bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】

    参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...

随机推荐

  1. Linux 下Qt实现守护进程实例(转)

     原文地址:Linux守护进程的编程方法(含实例) 作者:lingdxuyan 参考文献 Linux信号列表(zz) Linux 守护进程的编程方法 linux上编写守护进程的例程 Linux下后台守 ...

  2. java多线程读一个变量需要加锁吗?

    如果只是读操作,没有写操作,则可以不用加锁,此种情形下,建议变量加上final关键字: 如果有写操作,但是变量的写操作跟当前的值无关联,且与其他的变量也无关联,则可考虑变量加上volatile关键字, ...

  3. 部署Linux项目

    部署Linux项目   1● 下载软件 ftp       安装 2● 创建连接 3● java项目   gunzip –c *.gz tar –xzf *.gz       rm –rf rm -r ...

  4. Centos 7.4 源码 Nginx 安装

    一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel 二.首先要安装 PCRE ...

  5. owin启动事项

    在上下文中找不到 owin.Environment 项 owin没有启动. 尝试加载应用时出现了以下错误.- 找不到包含 OwinStartupAttribute 的程序集 startup类不是通过v ...

  6. Spring MVC之DispatcherServlet初始化详解

    Spring作为一个优秀的web框架,其运行是基于Tomcat的.在我们前面的讲解中,Spring的驱动都是使用的ClassPathXmlApplicationContext,并且都是直接在main方 ...

  7. DoTween动画中的几种函数。

    1.transform.DOLocalMoveX(200, 1).From(true); 动画默认是从当前位置沿着X轴移动到x=200的位置. 加上Form变为从X=200的位置移动到当前位置,fro ...

  8. Hive/Hbase/Sqoop的安装教程

    Hive/Hbase/Sqoop的安装教程 HIVE INSTALL 1.下载安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3 ...

  9. Fedora防火墙配置

    简介: Fedora 18以及之后的版本,防火墙的管理不再基于iptables,而基于firewall的东西.firewall的功能相对复杂一些,可以控制服务,控制端口,设置安全区域,设置端口转发等功 ...

  10. C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...