【JZOJ6367】工厂(factory)
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;
}
【JZOJ6367】工厂(factory)的更多相关文章
- 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)
一,总体概要 1,笔者浅谈 说起设计模式其实并不是什么很新奇的概念,它也不是基于特定语言所形成的产物,它是基于软件设计原则以及相关的方法论和经过特定时期衍生出的若干解决方案.本文会以一个实例带入大家学 ...
- 设计模式 工厂-Factory
在开始笔记之前先推荐一个网站:http://design-patterns.readthedocs.org/zh_CN/latest/index.html 网站对每一个Pattern都有详尽的解说.并 ...
- [设计模式3]--工厂(Factory)模式
原文出处:http://blog.csdn.net/lwbeyond/article/details/7528309 工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式 ...
- 设计模式C++描述----03.工厂(Factory)模式
工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一. 简单工厂模式 简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品.当增加新的产品时,就需要 ...
- 设计模式--简单工厂(Factory)模式
温故而知新,看了以前写的博文<Asp.net读取Excel文件 2>http://www.cnblogs.com/insus/archive/2011/05/05/2037808.html ...
- Head First 设计模式 —— 04. 工厂 (Factory) 模式
思考题 如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111 将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类 简单工厂 不是23种GOF ...
- factory工厂模式之工厂方法FactoryMethod
工厂方法(Factory Method) * 工厂方法把不同的产品放在实现了工厂接口的不同工厂类(FactoryAImpl,FactoryBImpl...)里面, * 这样就算其中一个工厂类出了问题, ...
- 工厂模式的进阶复习(Factory)
工厂模式进阶复习 看了多遍的工厂模式,老是忘记不同模式有什么区别,本文重点说明一下工厂模式的三种方式(简单工厂模式,工厂方法模式,抽象工厂模式)的区别 1.简单工厂模式 简单工厂模式通过Factory ...
- 简单工厂模式(Simple Factory Pattern)
简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...
随机推荐
- 高并发下的缓存架构设计演进及redis常见的缓存应用异象解决方案
待总结 缓存穿透 缓存击穿 缓存雪崩等
- Java判断链表是否为回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 思路:1.通过快慢指针,来遍历链表 ...
- Java&Quartz实现任务调度
目录 Java&Quartz实现任务调度 1.Quartz的作用 2.预备 3.Quartz核心 3.1.Job接口 3.2.JobDetail类 3.3 JobExecutionContex ...
- leetcood学习笔记-226- 翻转二叉树
题目描述: 第一次提交: class Solution(object): def invertTree(self, root): """ :type root: Tree ...
- 树形dp换根,求切断任意边形成的两个子树的直径——hdu6686
换根dp就是先任取一点为根,预处理出一些信息,然后在第二次dfs过程中进行状态的转移处理 本题难点在于任意割断一条边,求出剩下两棵子树的直径: 设割断的边为(u,v),设down[v]为以v为根的子树 ...
- NX二次开发-C++ DeleteFile删除文件实例代码
NX9+VS2012 #include<Windows.h> DeleteFile("D:\\1\\test123.prt"); Caesar卢尚宇 2019年7月29 ...
- idea和eclipse快捷键对比(转)
分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl + F Ctrl + F Ctrl + R 查找替换 Alt + P/A 逐个/全部替换 Alt + F3 查找当前选中词 ...
- 其它课程中的python---1、python基础
其它课程中的python---1.python基础 一.总结 一句话总结: 可以先把视频平台搭起来,这样学习效率会高很多,而且有额外收益 1.python的优势有哪些? 一个广泛的标准库 扩展性:比如 ...
- 秦曾昌人工智能课程---5、KNN和朴素贝叶斯
秦曾昌人工智能课程---5.KNN和朴素贝叶斯 一.总结 一句话总结: 拟合和概率:构建机器学习模型,一般有拟合和概率两种方式 轻学无用:一定要保证学有所用,要深入学习,比如之前做的安卓,一定要学通, ...
- pycharm 使用心得(一)安装和首次使用
PyCharm 是我用过的python编辑器中,比较顺手的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. 首先预览一下 PyCharm 在实际应用中的界面:(更改了PyC ...