Problem\mathrm{Problem}Problem
题目大意: 德黑兰的一家每天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)更多的出纳员在工作
Solution\mathrm{Solution}Solution
着道题的题解什么就不管他了…(反正是对着标程写的),主要是说一下思路,因为比较重要。
我们设sumisum_isumi表示第iii个时刻可以雇佣的人数,sis_isi表示0−i+10-i+10−i+1时刻雇佣的总人数。
那么对于某一个时候来说,必然要在任意时刻t满足:[t−8,t][t-8,t][t−8,t]时间段内有r[t]r[t]r[t]个人。这样我们就可以转化为了前缀和相减的形式。但是由于时间是环形的,我们我们需要进行分类讨论。
对于时间[8,24][8,24][8,24]来说,需要满足条件:s[i]−s[i−8]≥r[i]s[i]-s[i-8]≥r[i]s[i]−s[i−8]≥

博客介绍了如何利用差分约束系统解决德黑兰一家超市的出纳员雇佣问题。经理需要在每天不同时段安排不同数量的出纳员,应聘者每天工作8小时。通过前缀和与环形差分约束,可以找到满足条件的最少出纳员数目。解决方案中涉及二分查找和线性规划思想。
最低0.47元/天 解锁文章
611

被折叠的 条评论
为什么被折叠?



