題面戳我
題面描述
乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾(i=l,2,…,n)。餐廳可以從三種途徑獲得餐巾。
(1)購買新的餐巾,每塊需p分;
(2)把用過的餐巾送到快洗部,洗一塊需m天,費用需f分(fm),費用需s分(s輸出樣例#1:
64
說明
n<=2000
ri<=10000000
p,f,s<=10000
時限4s
網路流24題裡面很有意思的乙個建圖
因為每天最終的ri是固定的,所以我們可以直接假設每天都有ri塊舊餐巾。
每天拆成兩個點,新建源點匯點\(s\),\(t\)。
\(s\)連向\(i'\),\(i\)連向\(t\),均容量\(r_i\)費用0;
\(s\)連向\(1\)容量\(inf\)費用\(p\),其餘\(i-1\)連向\(i\)容量\(inf\)費用0;對應購買餐巾(可以當做是第一天買了所有餐巾,然後餐巾可以留到以後去使用)
\(i'\)分別連向\(i+m\)和\(i+n(i+m,i+n<=n)\),容量\(inf\)費用對應\(f\)或\(s\)。(快洗或慢洗)
建完圖跑費用流。
#include#include#include#includeusing namespace std;
#define inf 1000000000
const int _ = 100005;
struct edgea[_<<1];
int n,r[_],p,m,f,n,s,s,t,head[_],cnt=1,dis[_],vis[_],pe[_],pv[_];
long long ans;
queueq;
int gi()
void link(int u,int v,int w,int cost)
; head[u]=cnt;
a[++cnt]=(edge);
head[v]=cnt;
}bool spfa()
} vis[u]=0;
} return dis[t]}int main()
while (spfa())
printf("%lld\n",ans);
return 0;
}
網路流24題10 餐巾計畫問題
最小費用最大流 建圖方式真麻煩 真是網路流裡的泥石流清流啊 老規矩 先建立超源點s和超匯點e 對於每一天 我們可以拆成2個點 乙個點稱為1號連線s 另外乙個稱為2號連線e 流量都是當天餐巾 費用0 由於我們可以不洗餐巾所以可以直接連線下一天 倆一號點連線 費用為0 流量inf 注意邊界 我們可以買餐...
網路流24題 13 餐巾計畫問題
寫網路流寫的頭昏腦漲qaq大概還是太菜了 比較有趣的建圖題 對於每乙個點拆點拆成早晨和晚上分別為 i 和 i 1.s i r,p 每天早晨可以買最多r條新餐巾 一條p分 2.s i r,0 每天用剩下r條髒餐巾 沒有代價 3.i t r,0 每天要用r條乾淨餐巾 沒有代價 4.i i m inf,f...
線性規劃與網路流24 餐巾計畫問題
題目鏈結點這裡 犯了個智障錯誤,找錯找了一上午,最小費用問題,建模對於我這種菜雞有點難想到。大概這樣建模 把第i天,分為2個點 xi和yi 1 從s向每個xi連一條容量為ri,費用為0的邊。2 從每個yi向t連一條容量為ri,費用為0的邊。3 從s向每個yi連一條容量為無窮大,費用為p的邊。4 從每...