当前位置: 代码迷 >> 综合 >> 『二分答案·差分约束』POJ1275:Cashier Employment
  详细解决方案

『二分答案·差分约束』POJ1275:Cashier Employment

热度:69   发布时间:2023-12-17 11:01:28.0

P r o b l e m \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)更多的出纳员在工作

S o l u t i o n \mathrm{Solution} Solution

着道题的题解什么就不管他了…(反正是对着标程写的),主要是说一下思路,因为比较重要。

我们设 s u m i sum_i sumi?表示第 i i i个时刻可以雇佣的人数, s i s_i si?表示 0 ? i + 1 0-i+1 0?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 ]