description
乙個餐廳在相繼的$n$天裡,每天需用的餐巾數不盡相同,假設第$i$天需要$r_i$塊餐巾$(i\in[1,n])$.
餐廳可以購買新的餐巾,每塊餐巾的費用為$p$分;或者把舊餐巾送到快洗部,洗一塊需$m$天,其費用為$f$分;或者送到慢洗部,洗一塊需$n$天$(n>m)$,其費用為$w(w
每天結束時,餐廳必須決定將多少塊髒的餐巾送到快洗部,多少塊餐巾送到慢洗部,以及多少塊儲存起來延期送洗.但是每天洗好的餐巾和購買的新餐巾數之和,要滿足當天的需求量.
試為餐廳合理地安排好$n$天中餐巾使用計畫,使總的花費最小.
input
第$1$行有$6$個正整數$n,p,m,f,n,w.n$是要安排餐巾使用計畫的天數;$p$是每塊新餐巾的費用;$m$是快洗部洗一塊餐巾需用天數;$f$是快洗部洗一塊餐巾需要的費用;$n$是慢洗部洗一塊餐巾需用天數;$w$是慢洗部洗一塊餐巾需要的費用.
接下來的$n$行是餐廳在相繼的$n$天裡,每天需用的餐巾數.
output
一行乙個整數餐廳在相繼的$n$天裡使用餐巾的最小總花費.
sample input
3 10 2 3 3 2
5 6
7 sample output
145hint
$n\;\leq\;1000$
solution
把第$i$天拆成兩個點$x_i,y_i$,分別表示當天用完的和需要的.
從$s$向$x_i$連一條容量為$r_i$,費用為$0$的有向邊.
從$y_i$向$t$連一條容量為$r_i$,費用為$0$的有向邊.
從$x_i$向$x_$連一條容量為$+\infty$,費用為$0$的有向邊.(不在第$i$天洗的餐巾)
從$x_i$向$y_$連一條容量為$+\infty$,費用為$f$的有向邊.
從$x_i$向$y_$連一條容量為$+\infty$,費用為$w$的有向邊.
求最小費用最大流.
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#define n 2005
#define m 20005
#define inf 1000000000
using
namespace
std;
struct
graphe[m];
struct
edgepre[n];
int g[n],dis[n],n,p,s,t,d1,w1,d2,w2,cnt=1
;bool
inq[n];
queue
q;inline
void addedge(int x,int y,int f,int
w)inline
void adde(int x,int y,int f,int
w)inline
bool spfa(int
u) q.push(u);dis[u]=0;inq[u]=true
;
while(!q.empty()) } }
return dis[t]}inline
intmf()
}return
ret;
}inline
void
aireen()
for(int i=1;i<=n;++i)
printf(
"%d\n
",mf());
}int
main()
網路流24題 餐巾計畫問題
傳送門 這個題我一開始沒把tot賦值成 1,然後調了1h。然後只拿了20,看了題解才知道漏了一種情況,那就是其實餐巾是可以留到第二天的。然後就沒了。對了,忘說做法了 尷尬 其實就是拆點,分別連邊,實現題目中的三種操作,具體可以看我的 include include include include i...
網路流24題餐巾計畫問題
乙個餐廳在相繼的 n n 天裡,每天需用的餐巾數不盡相同。假設第 i role presentation i i天需要 ri r i塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 p p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n r...
網路流24題 餐巾計畫問題
一道建模稍微有難度的網路流,首先你需要考慮到拆點,確實有點難度,你需要把一天拆成乾淨餐巾和骯髒餐巾,因為髒餐巾是可以轉化為乾淨餐巾的,你需要做到這個過程,所以你需要拆點,其次難想到的應該是如何解決快洗部和慢洗部每次只能洗一件並且需要洗多天,如何安排哪天的餐巾去洗就是個問題,所以可以考慮每天的餐巾都可...