乙個餐廳在相繼的
n n
天裡,每天需用的餐巾數不盡相同。假設第
i' role="presentation">i
i天需要 ri
r
i塊餐巾( i=1,2,…,n)。餐廳可以購買新的餐巾,每塊餐巾的費用為
p p
分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分;或者送到慢洗部,洗一塊需
n' role="presentation">n
n天(n>m),其費用為s(
ss (s
。每天結束時,餐廳必須決定將多少塊髒的餐巾送到快洗部,多少塊餐巾送到慢洗部,以及多少塊儲存起來延期送洗。但是每天洗好的餐巾和購買的新餐巾數之和,要滿足當天的需求量。
試設計乙個演算法為餐廳合理地安排好
n n
天中餐巾使用計畫,使總的花費最小。程式設計找出乙個最佳餐巾使用計畫。
由標準輸入提供輸入資料。檔案第1行有1個正整數
n' role="presentation">n
n,代表要安排餐巾使用計畫的天數。
接下來的
n n
行是餐廳在相繼的
n' role="presentation">n
n天裡,每天需用的餐巾數。
最後一行包含5個正整數p,
m,f,
n,s p,m
,f,n
,s
。p p
是每塊新餐巾的費用;
m' role="presentation">m
m是快洗部洗一塊餐巾需用天數;
f f
是快洗部洗一塊餐巾需要的費用;
n' role="presentation">n
n是慢洗部洗一塊餐巾需用天數;
s s
是慢洗部洗一塊餐巾需要的費用。
將餐廳在相繼的n天裡使用餐巾的最小總花費輸出
一道非常有意思的費用流,建圖方式非常巧(gui)妙(chu)
建圖:
1.將每天拆成兩部分上午和下午(可以感性地理解)
2.建立超級源s與每天上午連一條容量為x,費用為0的邊
3.建立超級源t,將每天上午向t連一條容量為x,費用為0的邊
4.從每天上午向第二天上午連一條無限走不要錢的邊
5.從每天上午向第m天連一條容量為inf,費用為f的邊
6.同5
7.從s像每天下午連一條容量為inf,費用為p的邊
然後跑一邊費用流
洛谷上可以測
#include
#include
#include
#include
using
namespace
std;
#define int long long//毒瘤?呵。
const
int inf=10000000000000000ll;
#define maxn 1000010
inline
int read()
while(ch>='0'&&ch<='9')
return ret;
}struct edgee[maxn];
int ecnt=1;
int head[maxn],dis[maxn];
bool vis[maxn];
void addedge(int u,int v,int w,int c)
void addedge(int u,int v,int w,int c)
int n,m,s,t;
bool spfa()}}
return dis[s]!=inf;
}int bns=0;
int dfs(int x,int nar)
return used;
}void zkw()
memset(vis,0,sizeof(vis));
}printf("%lld\n",bns);
}main()
int t1=read(),t2=read(),t3=read(),t4=read(),t5=read();
for(int i=1;i<=n;++i)
zkw();
return
0;}
網路流24題 餐巾計畫問題
傳送門 這個題我一開始沒把tot賦值成 1,然後調了1h。然後只拿了20,看了題解才知道漏了一種情況,那就是其實餐巾是可以留到第二天的。然後就沒了。對了,忘說做法了 尷尬 其實就是拆點,分別連邊,實現題目中的三種操作,具體可以看我的 include include include include i...
網路流24題 餐巾計畫問題
一道建模稍微有難度的網路流,首先你需要考慮到拆點,確實有點難度,你需要把一天拆成乾淨餐巾和骯髒餐巾,因為髒餐巾是可以轉化為乾淨餐巾的,你需要做到這個過程,所以你需要拆點,其次難想到的應該是如何解決快洗部和慢洗部每次只能洗一件並且需要洗多天,如何安排哪天的餐巾去洗就是個問題,所以可以考慮每天的餐巾都可...
網路流24題 餐巾計畫問題
description 乙個餐廳在相繼的 n 天裡,每天需用的餐巾數不盡相同,假設第 i 天需要 r i 塊餐巾 i in 1,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天 n m 其費用為 w w ...