【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)方法,因此简单工厂模式又被 ...
随机推荐
- 50-Ubuntu-其他命令-2-软硬链接示意图
在Linux中,文件名和文件的数据是分开存储的. 使用ls -lh可以查看一个文件的硬链接数. 在日常工作中,几乎不会建立文件的硬链接数. 在Linux中,只有文件的硬链接数等于0才会被删除.如下图第 ...
- 构造+数位dp
参考博客: 题目链接: 题意:给定正整数a,b,k,你的任务是在所有满足a<=n<=b中的整数n中,统计有多少个满足n自身是k的倍数,且n的各位数字之和也是k的倍数. [思路] 这种题的固 ...
- python--面向对象:类和对象命名空间
一.一个类可以定义两种属性:静态属性和动态属性 (一)对于不可变数据类型来说,类变量最好用类名操作,也可以用对象操作,但是只能查,不能改,对象改的都只是相当于在自己的命名空间里重新建立了一个 clas ...
- 从零开始搭建系统1.1——CentOs安装
本篇主要是记录安装CentOs的过程,为什么会选择CentOs,没有过多的原因,主要是出于CentOs相对来说安装的人比较多, 以后有问题了方便查资料.本次安装是安装在一台笔记本上,WIN7+Cent ...
- struts2注解方式的验证
struts2的验证分为分编程式验证.声明式验证.注解式验证.因现在的人越来越懒,都追求零配置,所以本文介绍下注解式验证. 一.hello world 参考javaeye的这篇文章,按着做一次,起码有 ...
- java.sql.Date和java.util.Date的联系和区别
1) java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值.毫秒值表示自 1970 年 1 月 1 日 0 ...
- hadoop.io.native.NativeID$Windows.access0 报错问题解决
系统:win10 hadoop-2.6.0版本 java:1.8 版本32位 wordcount在本地运行时报错: Exception in thread "main" jav ...
- Python语法学习记录之tuple该如何使用?
一.介绍 dict 的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明: 下面例子中 a 是整数, b 是字符串, c 是数组,这个例子充分说明哈希数组的适用性. 每一个元素是pa ...
- H5调用百度地图导航
template <div class="map"> <div class="content_flex"><img src=&qu ...
- leetcode-158周赛-5222-分割字符串
题目描述: 自己的提交: class Solution: def balancedStringSplit(self, s: str) -> int: if not s:return 0 res ...