【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)方法,因此简单工厂模式又被 ...
随机推荐
- 净心诀---python3生成器
生成器的作用----减少程序运行的内存开销 生成器特点: 1.一个一个的取值,而不是一次性把所有数据创建出来,迭代器中的数据不取不创建2.只能按照顺序取,不能跳过也不能回头3.一个迭代器中的数据只能从 ...
- nashorn中js数组转为对象的问题
背景 在项目中,使用jdk中的nashorn执行javascript脚本,例如如下脚本片段: let ctx = session.ctx; ctx.confirm = { //车牌划分后的数组 seg ...
- pytest--fixure前置执行一个函数
import pytest@pytest.fixture()def login_r(): print('登陆') @pytest.fixture()def open_browser(): print( ...
- c# 使用NOPI 操作Excel
最近项目需要导出Excel,找来找去,微软有自己的Excel组件 using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;,但 ...
- Java中的数据结构有哪些?HashMap的工作原理是什么?
Java中常用数据结构 常用的数据结构有哈希表,线性表,链表,java.util包中有三个重要的接口:List,Set,Map常用来实现基本的数据结构 HashMap的工作原理 HashMap基于ha ...
- 关于虚拟机中linux系统时间的问题
由于考试需求,我在vm上放置了考试用的linux环境,在进行操作的时候需要回调时间才能进行一些操作.但是每次重启之后,时间总是会和物理服务器的时间进行同步,让我非常的苦恼. 终于有一天我想清楚了如何表 ...
- js单击时页面的弹出
<!DOCTYPE html><html> <head> <script language="JavaScript&quo ...
- Bootstrap快速入门并且建立常用模板
对于移动端,能够快速搭建网站,操作相对简单 ,更容易掌握,这篇文章就介绍一下BootStrap 一 什么是Bottstrap 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受 ...
- AnalyticDB for PostgreSQL 6.0 新特性介绍
阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...
- OpenStack与KVM的区别与联系
转:https://www.aliyun.com/zixun/content/2_6_280418.html OpenStack与KVM都是目前IT界比较热门的两个词汇.它们都是开源的,都与Linux ...