poj1275

题目大意:

每天有24小时,每个小时需要一定的人。有m个人每个人会有一个开始工作的时间,每个人会工作8小时,问至少需要多少人才能完成任务。如果这m个人也不能完成任务就输出"No Solution"。每天会不断的循环下去,也就是今天20点雇佣的人,会工作到明天4点。

思路

用s[i]表示前i个小时选的人数,ans表示选的人数,r[i]表示第i个小时需要的人数。h[i]表示第i个小时可以雇佣的人数。

约束条件:

(1): 每个小时雇佣的人数不可能为负数——

\(s[i]-s[i-1]\geqslant0\)

(2): 每个小时雇佣的人数不应该超过这个小时所需要的人数——

\(s[i]-s[i-1]\leqslant r[i]\)

(3): 前8个小时雇佣的人数不应该小于当前需要的人数——

\(s[i]-s[i-8]\geqslant r[i] (i>8)\)

\(ans+s[i]-s[i+16]\leqslant r[i] (r<=8)\)

(4): 每天的人数应该为ans——

\(s[24]-s[0]\geqslant ans\)

\(s[24]-s[0]\leqslant ans\)

代码:

/*s[i]表示前i个小时选的人数,r[i]表示第i个小时需要的人数,h[i]表示第i个小时报名的人数
s[i]-s[i-1]>=0
s[i-1]-s[i]>=-h[i]
s[i]-s[i-8]>=r[i](i>8)
s[24]-s[0]>=ans
ans+s[i]-s[i+16]>=r[i](i<=8)
*/
#include<queue>
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1000+100,K=30;
int s[K],r[K],h[K];
struct node
{
int v,nxt,w;
}e[N*10];
int head[N],ejs;
void add(int u,int v,int w) {
e[++ejs].v=v;e[ejs].w=w;e[ejs].nxt=head[u];head[u]=ejs;
}
int dis[K],vis[K],in[K];
queue<int>q;
int spfa() {
while(!q.empty())
q.pop();
memset(in,0,sizeof(in));
memset(dis,-0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[0]=0;
vis[0]=1;
q.push(0);
while(!q.empty()) {
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i!=-1;i=e[i].nxt) {
int v=e[i].v;
if(dis[v]<dis[u]+e[i].w) {
dis[v]=dis[u]+e[i].w;
if(!vis[v]) {
vis[v]=1;
q.push(v);
in[v]++;
if(in[v]>24) return 0;
}
}
}
}
return 1;
}
int work(int ans) {
ejs=0;
memset(head,-1,sizeof(head));
for(int i=1;i<=24;++i) {
add(i,i-1,-h[i]);
add(i-1,i,0);
}
for(int i=9;i<=24;++i)
add(i-8,i,r[i]);
add(0,24,ans);
add(24,0,-ans);
for(int i=1;i<=8;++i)
add(i+16,i,r[i]-ans);
return spfa();
}
int main() {
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--) {
memset(r,0,sizeof(r));
memset(h,0,sizeof(h));
for(int i=1;i<=24;++i)
cin>>r[i];
int m;
cin>>m;
for(int i=1;i<=m;++i) {
int x;
cin>>x;
h[x+1]++;
}
int i;
for(i=0;i<=m;++i)
if(work(i)) break;
if(i<=m)
printf("%d\n",i);
else
printf("No Solution\n");
} return 0;
}

[poj1275][Cashier Employment]的更多相关文章

  1. POJ1275 Cashier Employment[差分约束系统 || 单纯形法]

    Cashier Employment Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7997   Accepted: 305 ...

  2. POJ1275 Cashier Employment 【二分 + 差分约束】

    题目链接 POJ1275 题解 显然可以差分约束 我们记\(W[i]\)为\(i\)时刻可以开始工作的人数 令\(s[i]\)为前\(i\)个时刻开始工作的人数的前缀和 每个时刻的要求\(r[i]\) ...

  3. POJ1275 Cashier Employment(差分约束)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9078   Accepted: 3515 Description A sup ...

  4. POJ1275 Cashier Employment 二分、差分约束

    传送门 题意太长 为了叙述方便,将题意中的$0$点看作$1$点,$23$点看做$24$点 考虑二分答案(其实从小到大枚举也是可以的) 设$x_i$是我们选的雇员第$i$小时开始工作的人数,$s_i$是 ...

  5. 【POJ1275】Cashier Employment 差分约束

    [POJ1275]Cashier Employment 题意: 超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23).R(0)表示从午夜到凌晨1:00所需要 ...

  6. 图论(差分约束系统):POJ 1275 Cashier Employment

    Cashier Employment Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7651   Accepted: 288 ...

  7. hdu 1529 Cashier Employment(差分约束)

    Cashier Employment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. 【POJ 1275】 Cashier Employment(差分约束系统的建立和求解)

    [POJ 1275] Cashier Employment(差分约束系统的建立和求解) Cashier Employment Time Limit: 1000MS   Memory Limit: 10 ...

  9. [HDU 1529]Cashier Employment(差分约束系统)

    [HDU 1529]Cashier Employment(差分约束系统) 题面 有一个超市,在24小时对员工都有一定需求量,表示为\(r_i\),意思为在i这个时间至少要有i个员工,现在有n个员工来应 ...

随机推荐

  1. Ionic 中控件点击延迟的处理

    原文发表于我的技术博客 本文分享了在 Ionic 中如何处理控件点击延迟的问题. 原文发表于我的技术博客 1. 问题描述 在 Ionic 中,当在 iOS 环境下运行元素的点击事件时,你会发现点击响应 ...

  2. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  3. OC与JS的交互(iOS与H5混编)

    大神总结WKWebView的坑:https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA 在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景. iO ...

  4. Jquery画折线图、柱状图、饼图

    1.今天做了一个折线图,首先需要导js文件.这里有一个demo:http://files.cnblogs.com/files/feifeishi/jquery_zhexiantubingtuzhuzh ...

  5. Leetcode——53.最大子序和

    @author: ZZQ @software: PyCharm @file: leetcode53_最大子序和.py @time: 2018/11/26 12:39 要求:给定一个整数数组 nums ...

  6. JavaScript的类、对象、原型、继承、引用

    以CSS为例,有一种为所有class为"xxxx"的元素添加样式(外联样式),那么所有class为xxx的元素样式就会改变,在css中像下面这么写: <html> &l ...

  7. linux 清空history以及记录原理

    1.当前session执行的命令,放置缓存中,执行exit时,把缓存信息写入~/.bash_history 2.当session直接被kill时,缓存中的历史命令不会写入~/.bash_history ...

  8. 让 VAGRANT 启动并运行起来

    这是一个帮助你快速入门Vagrant的初级教程.官方文档也可以很好的帮助你入门,但是本文更针对完全零基础的初学者并且会对某些问题直接切入正题. 本文在任何方面都不会取代官方文档,而且我建议读完本文的人 ...

  9. jmeter属性与变量

    jmeter属性定义在jmeter.properties 文件中 更多详细说明: Getting Started - Configuring JMeter 属性是全局的,常用来定义一些jmeter使用 ...

  10. delphi中ini 文件操作记要(1): 使用 TIniFile

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...