description

大神 wyp 开了家工厂,工厂有 n 个工人和 p 条流水线。

工厂的工人都是睡神,因此第 i 个工人只会在 si 至 ti 时刻才会工作。

每个工人都会被分派到一条流水线上,然而,一条流水线只会在这条线的工人到齐

时才能开工,其余时间即使有部分工人到了也只能休息。

根据大神 wyp 的神谕,不能有流水线的工作时间为 0,也不能有工人没被分派到

流水线上(即使这样会降低实际工作时间)。

工人们 dp 不过关,所以请你求出能得到的最大的工作时间总和。

保. 证. 题. 目. 至. 少. 存. 在. 一. 种. 合. 法. 的. 分. 配. 方. 案。.

阅读样例以更好地理解本题。


analysis

  • 首先把区间分成两种,不包含任何区间的区间为\(A\)集合,包含至少一个区间的区间为\(B\)集合

  • 那么明显把\(B\)里的区间和\(A\)放到一组答案肯定不会更优,于是考虑\(B\)里的区间都单独分组

  • 按左端点排序后对\(A\)进行\(DP\),设\(f[i][j]\)表示选前\(i\)个区间分了\(j\)组的最大答案

  • \(f[j][k+1]=max(f[i][k]+t[j+1]-s[j])\ (s[j]<t[j+1])\),\(O(n^3)\)转移

  • 转移的限制条件保证了两个区间有交

  • 最后枚举一下有几个区间由\(A\)的区间组成,剩下的区间就取\(B\)最长的几个区间单独分组


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 205
#define ha 19260817
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; ll f[MAXN][MAXN];
bool bz[MAXN];
ll pre[MAXN];
ll n,m,p,tmp,ans=-ha; struct node
{
ll x,y;
}a[MAXN],A[MAXN],B[MAXN]; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll max(ll x,ll y){return x>y?x:y;}
inline bool cmp(node a,node b){return a.y-a.x>b.y-b.x;}
inline bool cmpp(node a,node b){return a.x<b.x;}
int main()
{
//freopen("T2.in","r",stdin);
freopen("factory.in","r",stdin);
freopen("factory.out","w",stdout);
n=read(),p=read(),memset(bz,1,sizeof(bz));
fo(i,1,n)a[i].x=read(),a[i].y=read();
fo(i,1,n)fo(j,1,n)if (i!=j)
if ((a[i].x<a[j].x && a[j].y<=a[i].y) || (a[i].x<=a[j].x && a[j].y<a[i].y)){B[++tmp]=a[i],bz[i]=0;break;}
fo(i,1,n)if (bz[i])A[++m]=a[i];
sort(A+1,A+m+1,cmpp);
memset(f,128,sizeof(f)),f[0][0]=0;
fo(i,0,m-1)fo(k,0,p-1)fo(j,i+1,m)if (A[j].x<A[i+1].y)f[j][k+1]=max(f[j][k+1],f[i][k]+A[i+1].y-A[j].x);
sort(B+1,B+n-m+1,cmp);
fo(i,1,n-m)pre[i]=pre[i-1]+B[i].y-B[i].x;
fo(i,1,p)ans=max(ans,f[m][i]+pre[p-i]);
printf("%lld\n",ans);
return 0;
}

最新文章

  1. Sublime Text 配置代码
  2. NVMe over Fabrics:概念、应用和实现
  3. 关于CCSprite不能及时显示的问题
  4. IO - IOUtils
  5. homework-05 大家一起玩游戏~
  6. MSVC CRT运行库启动代码分析
  7. IOC容器初始化过程
  8. 6.MIL采集和实时显示
  9. CF 460C Present 【DP+】主意
  10. 一键保存网页为PDF
  11. Storm官方文档翻译之创建Storm项目
  12. jquery元素是否可见(隐藏)
  13. 阻止安卓实体返回键后退的网页js实现
  14. 豹哥嵌入式讲堂:ARM知识概要杂辑(4)- Cortex-M处理器性能指标
  15. 如何用ABP框架快速完成项目(4) - 如何正确使用ABP?
  16. kubectl常用命令汇总
  17. Java知多少(104)网络编程之统一资源定位符URL
  18. Maven打包将所有的依赖都打入
  19. 吴裕雄 python神经网络 水果图片识别(5)
  20. sqlserver 自动创建作业执行备份数据库

热门文章

  1. python调用tushare获取上市公司管理层人员薪酬和持股
  2. EtherCat开源主站SOEM在windows下工程配置
  3. Tomcat7安装和配置以及优化
  4. IDA静态编译之sub
  5. lua redis 操作
  6. 网络编程之TCP协议怎么使用?
  7. 3年A班,从现在起大家都是人质-观后感
  8. 再学 GDI+文本输出文本样式
  9. NX二次开发-NXOPEN更改工程图视图名字baseView1-&gt;SetName(&quot;LSY&quot;);
  10. 杂项:ionic