CF802C Heidi and Library (hard)

https://www.luogu.org/problemnew/show/CF802C

你有一个容量为k的空书架,现在共有n个请求,每个请求给定一本书ai,如果你的书架里没有这本书,你就必须以ci的价格购买这本书放入书架。当然,你可以在任何时候丢掉书架里的某本书。请求出完成这n个请求所需要的最少价钱。(1<=n,k<=80)

我们用费用流,很难一天一天考虑买还是不买,只能全都先买进来。考虑一种操作,能把多余的购入花费抵消掉。

考虑第i天购入的一本书,如果留到了第j天,我们可以在第j-1天“卖”掉这本书,获得相应的收入。这样就相当于第j天没有买这本书。

建图方法如下:

对每天都有两个节点vi,vi'表示入点和出点。

从源点向每个vi连容量为1,费用为当天这种书的价格c[ai]的边,表示每本书。

从每个vivi+1连容量为k-1,费用为0的边,表示第i天书架最多留k-1本书,剩下1个位置给第i+1天的书。

从每个vivi连容量为1,费用为0的边,表示当天买来就扔掉了这本书。

vi1ai上一次的出现位置j对应的vj连容量为1,费用为c[ai]的边,表示卖掉这本书。

从每个vi向汇点连容量为1,费用为0的边,表示要么扔,要么卖,最多选择一种。

如果当天没有扔,则当天的流一定会顺着书架往下流,直到卖掉。

转载于:https://www.cnblogs.com/pthws/p/11161167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值