POJ 1275 Cashier Employment(差分约束系统)

摘自冯威论文——《数与图的完美结合》

设num[ i ]i时刻能够开始工作的人数,x[ i ]为实际雇佣的人数,那么x[ I ]<=num[ I ]
r[ i ]i时刻至少需要工作的人数,于是有如下关系:
    x[ I-7 ]+x[ I-6 ]+x[ I-5 ]+x[ I-4 ]+x[ I-3 ]+x[ I-2 ]+x[ I-1 ]+x[ I ]>=r[ I ]
s[ I ]=x[ 1 ]+x[ 2 ]…+x[ I ],得到
    0<=s[ I ]-s[ I-1 ]<=num[ I ]
0<=I<=23
    s[ I ]-s[ I-8 ]>=r[ I ]
8<=I<=23
    s[ 23 ]+s[ I ]-s[ I+16 ]>=r[ I ]
0<=I<=7

   
对于以上的几组不等式,我们采用一种非常笨拙的办法处理这一系列的不等式(其实也是让零乱的式子变得更加整齐,易于处理)。首先我们要明白差分约束系统的应用对象(它通常针对多个二项相减的不等式的)于是我们将上面的所有式子都转化成两项未知项在左边,另外的常数项在右边,且中间用>=连接的式子,即:
    s[ I ]-s[ I-1 ]>=0            (0<=I<=23)
    s[ I-1 ]-s[ I ]>=-num[ I ]       (0<=I<=23)
    s[ I ]-s[ I-8 ]>=r[ I ]         (8<=I<=23)
    s[ I ]-s[ I+16 ]>=r[ I ]-s[ 23 ]  (0<=I<= 7)

 

论文有点小小的漏洞,也导致了它论文附带的程序是错误的,有BUG

可行方案中还差一个约束条件

S[23] - S[-1] >= sum;sum为雇佣的出纳员总数

 

将所有形如 A-B>=C 的式子 我们从节点B 引出一条有向边指向A边的权值为C  (这里注意由于左右确定,式子又是统一的>=的不等式,所以AB是相对确定的,边是一定是指向A的) ,图就建成了 。

在程序中,我用0作为上面说的-1来构图

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值