題目描述
乙個餐廳在相繼的 n nn 天裡,每天需用的餐巾數不盡相同。假設第 i ii 天需要 ri r_iri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 p pp 分;或者把舊餐巾送到快洗部,洗一塊需 m mm 天,其費用為 f ff 分;或者送到慢洗部,洗一塊需 n nn 天,其費用為 s ss 分(ss每天結束時,餐廳必須決定將多少塊髒的餐巾送到快洗部,多少塊餐巾送到慢洗部,以及多少塊儲存起來延期送洗。但是每天洗好的餐巾和購買的新餐巾數之和,要滿足當天的需求量。
試設計乙個演算法為餐廳合理地安排好 n nn 天中餐巾使用計畫,使總的花費最小。
輸入格式
第 1 11 行有 6 66 個正整數 n nn、p pp、m mm、f ff、n nn、s ss。
n nn 是要安排餐巾使用計畫的天數,p pp 是每塊新餐巾的費用,m mm 是快洗部洗一塊餐巾需用天數,f ff 是快洗部洗一塊餐巾需要的費用,n nn 是慢洗部洗一塊餐巾需用天數,s ss 是慢洗部洗一塊餐巾需要的費用。
接下來的 n nn 行是餐廳在相繼的 n nn 天裡,每天需用的餐巾數。
輸出格式
輸出餐廳在相繼的 n nn 天裡使用餐巾的最小總花費。
樣例樣例輸入
3 10 2 3 3 256
7
樣例輸出
145
資料範圍與提示
1≤n≤1000 1 \leq n \leq 10001≤n≤1000
這是我碰到的第一道想了至少二十分鐘才理解的網路流題。
主要是要把當天要用的和當天用過的(沒洗的)分開來,弄成不同的兩個點,然後就可以從某天用過沒洗的點向n天或m天後要用的點連邊,費用為洗衣費用。
從源點向每個當天用過的(沒洗的)的點連邊,最大流量為當天要用的值。
從每個當天要用的的點向匯點連邊,最大流量為當天要用的值。
從每個第i天用過的(沒洗的)的點向第i+1天用過的(沒洗的)的點連邊,最大流量為inf。
從源點向每個當天要用的的點連邊,邊長inf,費用為p(購買費用)。
別人優雅的部落格
//serene#include#include#include#include#include#includeusing namespace std;
const int maxn=2000+10,maxm=6*maxn+10,inf=0x3f3f3f3f;
int day,p,m,f,n,r,s,t;
int aa;char cc;
int read()
struct node
node(int x,int y,int cap,int w):x(x),y(y),cap(cap),w(w){}
}node[2*maxm];
int fir[maxn],nxt[2*maxm],e=1;
void add(int x,int y,int z,int w)
int from[maxn],zz[maxn],dis[maxn];
bool vis[maxn];
bool spfa()
}s++;vis[x]=0;
}return dis[t]!=inf;}
int now,rs1=0,rs2=0;
int mcmf()
}return rs2;}
int main()
for(int i=1;i<=day;++i)
printf("%d",mcmf());
return 0;
}
網路流 24 題 餐巾計畫
這道題目很關鍵的一點就是,要明白用的餐巾和洗的餐巾是兩個系統。所以我們把每一天所用餐巾直接用乙個源點和匯點連線。解決第乙個系統。此時可能會洗餐巾,所以我們另起乙個點,從源點每一天引出髒的餐巾,數目依然是當天所用的餐巾數量,然後從這個點連線到m天後的第一系統的點和n天後第一系統的點,費用分別為f和s,...
網路流24題 餐巾計畫
乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f p 如m l時,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情況也如此。3 把餐巾送到慢洗部,洗一塊需n天 n m ...
網路流24題 餐巾計畫(費用流)
乙個餐廳在相繼的 n 天裡,每天需用的餐巾數不盡相同。假設第 i天需要 ri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天,其費用為 s 分 s f 每天結束時,餐廳必須決定將多少塊髒的餐巾送到快...