POJ 1275 Cashier Employment 出纳员问题 差分约束系统
来源:互联网 发布:滚动数组是什么 编辑:程序博客网 时间:2024/05/22 06:35
题目:
Tehran 的一家每天24 小时营业的超市,需要一批出纳员来满足它的需要。超市经理雇
佣你来帮他解决他的问题——超市在每天的不同时段需要不同数目的出纳员(例如:午夜时
只需一小批,而下午则需要很多)来为顾客提供优质服务。他希望雇佣最少数目的出纳员。
经理已经提供你一天的每一小时需要出纳员的最少数量——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),它们都是非负整数,
计算为满足上述限制需要雇佣的最少出纳员数目。在每一时刻可以有比对应的R(I)更多
的出纳员在工作。
分析
附上代码:
const
maxn=1000;
type
node=record
fromv,endv,v:longint;
end;
var
n,m,n1,temp:longint;
elist:array [1..maxn] of node;
t,value,data:array [-1..maxn] of longint;
procedure add(x,y,z:longint);
begin
inc(m);
with elist[m] do
begin
fromv:=x; endv:=y; v:=z;
end;
end;
procedure init;
var
i,x:longint;
begin
for i:=0 to 23 do
read(value[i]);
readln;
readln(n);
fillchar(t,sizeof(t),0);
for i:=1 to n do
begin
readln(x);
inc(t[x]);
end;
end;
procedure main;
var
i,j,min:longint;
check:boolean;
begin
for min:=1 to n do
begin
m:=0;
for i:=-1 to 23 do
data[i]:=maxn*maxn;
add(23,-1,-min);
for i:=0 to 23 do
begin
add(i,i-1,0); add(i-1,i,t[i]);
if i>7 then
add(i,i-8,-value[i])
else
add(i,i+16,-value[i]+min);
end;
for j:=0 to 23 do
begin
check:=true;
for i:=1 to m do
with elist[i] do
if data[endv]>data[fromv]+v then
begin
data[endv]:=data[fromv]+v;
check:=false;
end;
if check then
break;
end;
check:=true;
for i:=1 to m do
with elist[i] do
if data[endv]>data[fromv]+v then
begin
check:=false;
break;
end;
if check then
begin
writeln(min);
exit;
end;
end;
writeln('No Solution');
end;
begin
readln(n1);
for temp:=1 to n1 do
begin
init;
main;
end;
end.
- POJ 1275 Cashier Employment 出纳员问题 差分约束系统
- POJ--1275[Cashier Employment] 差分约束
- poj-1275-Cashier Employment-差分约束
- poj 1275 Cashier Employment 差分约束
- POJ 1275 Cashier Employment 差分约束
- POJ 1275 Cashier Employment(差分约束系统)
- POJ 1275-Cashier Employment(差分约束系统)
- poj——1275 Cashier Employment 差分约束系统
- POJ 1275 Cashier Employment(差分约束系统+二分)
- Cashier Employment poj 1275 差分约束系统
- poj 1275--Cashier Employment【差分约束系统】
- [POJ 1275] Cashier Employment 差分约束系统
- Cashier Employment--进阶差分约束系统
- poj 1275 Cashier Employment(差分约束#6)
- POJ 1275 Cashier Employment(差分约束)#by zh
- POJ 1275--Cashier Employment【差分约束,经典建边】
- 差分约束学习(二)POJ 1275:Cashier Employment
- POJ 1275Cashier Employment (差分约束 + spfa)
- 支持压力传感器20MS采集,数据无缝对传云端。
- Linux核心(转载)
- 各种经典堆
- Eclipse调优、设置大全
- 常用软件开发模型的介绍
- POJ 1275 Cashier Employment 出纳员问题 差分约束系统
- Cef经典问题
- java_fibonacci一维数组
- js 判断数据类型
- 关于cookie——setPath/setDomain
- [webGL学习]基于three.js构建WebGL实例讲解大纲
- golang 本人学习
- android:DDMS查看Threads
- OpenDaylight的Beryllium (铍)版本安装与配置