【POJ1275】Cashier Employment 差分约束
【POJ1275】Cashier Employment
题意: 超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23)。R(0)表示从午夜到凌晨1:00所需要出纳员的最少数目;R(1)表示凌晨1:00到2:00之间需要的;等等。每一天,这些数据都是相同的。 有N人申请这项工作,每个申请者i在每天24小时当中,从一个特定的时刻开始连续工作恰好8小时。定义ti(0<=ti<=23)为上面提到的开始时刻,也就是说,如果第i个申请者被录用,他(或她)将从ti时刻开始连续工作8小时。 试着编写一个程序,输入R(i),i=0,...,23,以及ti,i=1,...,N,它们都是非负整数,计算为满足上述限制需要雇佣的最少出纳员数目。
题解:差分约束还是不熟啊
这题的时间是循环的,所以列不等式不是那么容易
设a[i]为每一时刻最少雇佣的收银员数量,b[i]为每一时刻的总申请数,f[i]为0~i时刻实际雇佣的收银员数,根据题目要求并变形,有以下不等式关系: f[i]-f[i-1]≥0 (1<=i<=24) ——每一时刻雇佣数量大于等于0
f[i]-f[i-1]≤b[i] (1<=i<=24) ——每一时刻雇佣数量不超过总申请数
f[i]-f[i-8]≥a[i] (8<=i<=24) ——实际雇佣数量满足最小需求
f[i]-f[i+16]≥a[i]-f[24] (1<=i<=7) ——实际雇佣数量满足最小需求,注意i可能跨天
但是f[24]也是个变量,所以我们令ans=f[24],然后枚举ans,用SPFA判负环就好了
这样做会不会有什么问题?
问题在于f[i]-f[i+16]≥a[i]-f[24]和f[i]=f[i+16]≥a[i]-ans这两个不等式并不等价,前者对变量f[24]也具有一定限制,而后者将其省略掉了。所以,我们只需要令f[24]=ans,就能将错解排除掉,具体地,f[24]≥ans就可以
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int n,cnt;
int len[1010],dis[1010],to[1010],next[1010],head[1010],val[1010];
int inq[1010],s[1010],r[1010];
queue<int> q;
void add(int a,int b,int c)
{
to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
}
int spfa(int ans)
{
int u,i;
for(i=1;i<=7;i++) val[head[i]]=ans-r[i];
val[head[24]]=-ans;
memset(dis,0x3f,sizeof(dis));
memset(len,0,sizeof(len));
while(!q.empty()) q.pop();
for(i=0;i<=24;i++) q.push(i),dis[i]=len[i]=0,inq[i]=1;
while(!q.empty())
{
u=q.front(),q.pop(),inq[u]=0;
for(i=head[u];i!=-1;i=next[i])
{
if(dis[to[i]]>dis[u]+val[i])
{
dis[to[i]]=dis[u]+val[i];
len[to[i]]=len[u]+1;
if(len[to[i]]>25) return 0;
if(!inq[to[i]])
{
inq[to[i]]=1;
q.push(to[i]);
}
}
}
}
return 1;
}
void work()
{
int i,j,a;
for(i=1;i<=24;i++) scanf("%d",&r[i]);
scanf("%d",&n);
cnt=0;
memset(head,-1,sizeof(head));
for(i=1;i<=n;i++) scanf("%d",&a),s[a+1]++;
for(i=1;i<=24;i++) add(i-1,i,s[i]),add(i,i-1,0);
for(i=8;i<=24;i++) add(i,i-8,-r[i]);
for(i=1;i<=7;i++) add(i,i+16,0);
add(24,0,0);
for(i=1;i<=n;i++)
{
if(spfa(i))
{
printf("%d\n",i);
return ;
}
}
printf("No Solution\n");
}
int main()
{
int T;
scanf("%d",&T);
while(T--) work();
return 0;
}
≥
【POJ1275】Cashier Employment 差分约束的更多相关文章
- POJ1275 Cashier Employment(差分约束)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9078 Accepted: 3515 Description A sup ...
- POJ1275/ZOJ1420/HDU1529 Cashier Employment (差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 题意:一商店二十四小时营业,但每个时间段需求的出纳员不同,现有n个人申请这份工作, ...
- POJ1275 Cashier Employment[差分约束系统 || 单纯形法]
Cashier Employment Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7997 Accepted: 305 ...
- hdu1529 Cashier Employment[差分约束+二分答案]
这题是一个类似于区间选点,但是有一些不等式有三个未知量参与的情况. 依题意,套路性的,将小时数向右平移1个单位后,设$f_i$为前$i$小时工作的人数最少是多少,$f_{24}$即为所求.设$c_i$ ...
- HDU.1529.Cashier Employment(差分约束 最长路SPFA)
题目链接 \(Description\) 给定一天24h 每小时需要的员工数量Ri,有n个员工,已知每个员工开始工作的时间ti(ti∈[0,23]),每个员工会连续工作8h. 问能否满足一天的需求.若 ...
- Cashier Employment 差分约束
题意:有一个超市需要一些出纳员,已给出这个超市在各个时间段(0-1,1-2,2-3...共24个时间段)至少需要的出纳员数目,现在前来应聘有n个人,每个人都有一个固定的开始工作的时间,这也意味着从这个 ...
- poj 1275 Cashier Employment - 差分约束 - 二分答案
A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its n ...
- [HDU 1529]Cashier Employment(差分约束系统)
[HDU 1529]Cashier Employment(差分约束系统) 题面 有一个超市,在24小时对员工都有一定需求量,表示为\(r_i\),意思为在i这个时间至少要有i个员工,现在有n个员工来应 ...
- POJ1275 Cashier Employment 【二分 + 差分约束】
题目链接 POJ1275 题解 显然可以差分约束 我们记\(W[i]\)为\(i\)时刻可以开始工作的人数 令\(s[i]\)为前\(i\)个时刻开始工作的人数的前缀和 每个时刻的要求\(r[i]\) ...
随机推荐
- error while loading shared libraries *.so.*
转自 http://my.oschina.net/u/561492/blog/192341 ubuntu12.04-64位编译Android4.2时出现问题:error while loading s ...
- spark源代码
电子书: https://spark-internals.books.yourtion.com/
- Linux SSH登录服务器报ECDSA host key "ip地址" for has changed and you have requested strict checking.错误
Linux SSH命令用了那么久,第一次遇到这样的错误:ECDSA host key "ip地址" for has changed and you have requested ...
- hdu3948(后缀数组)
题意:给一串字符,需要你求不相同的回文子串个数....... 同ural1297,链接:http://www.cnblogs.com/ziyi--caolu/archive/2013/06/09/31 ...
- ibatis中in语句参数传入方法
第一种:传入参数仅有数组,iterate中不能有数组的属性名 <select id="GetEmailList_Test" resultClass=" ...
- phoenix 入门
http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html Blah, blah, blah - I just want to get s ...
- hive 和Hbase的pom文件
<hadoop-common></hadoop-common> <hadoop-hdfs></hadoop-hdfs> <dependency&g ...
- [Eth]Mac/Phy/mdio/Rgmii
转自:http://www.cnblogs.com/zxc2man/p/3769777.html 1. MDIO(Management Data Input/Output),对G比特以太网而言,串行通 ...
- android4.0.3源码之USB wifi移植心得
http://blog.csdn.net/eastmoon502136/article/details/7850157 http://forum.cubietech.com/forum.php?mod ...
- html5shiv.js分析-读源码之javascript系列
xiaolingzi 发表于 2012-05-31 23:42:29 首先,我们先了解一下html5shiv.js是什么. html5shiv.js是一套实现让ie低版本等浏览器支持html5标签的解 ...