题目描述 Description一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同。假设第 i 天需要 ri块餐巾(i=1,2,…,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 p 分;或者把旧餐巾送到快洗部,洗一块需 m 天,其费用为 f 分;或者送到慢洗部,洗一块需 n 天(n>m),其费用为 s<f 分。每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。试设计一个算法为餐厅合理地安排好 N 天中餐巾使用计划,使总的花费最小。编程找出一个最佳餐巾使用计划.
题解:
下面是构图
先把每个点拆点,假设是拆成node1,node2
然后我们可以分情况讨论,首先这两个点的流量为r[i]没问题吧
然后node1向node2向连一条inf的边,费用为0
node2要分情况讨论,
1:直接连向下一天的node2流量inf,费用0
2:连向后面第m天的node1,流量inf,费用1
3:连向后面第n天的node1,流量inf,费用1
然后S向每一个node1连一条r[i]的边,并且费用为p
然后最后一个点node2向T连一条sum r[i]的边
然后跑最小费用最大流