題解 餐巾計畫問題

2021-09-11 04:11:34 字數 1434 閱讀 7627

傳送門

乙個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir_iri​塊餐巾( i=1,2,…,n)。餐廳可以購買新的餐巾,每塊餐巾的費用為 ppp 分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分;或者送到慢洗部,洗一塊需 nnn 天(n>mn>mn>m),其費用為 sss 分(s這個題目是乙個費用流的題目

首先我們要把每一天拆成早上和晚上兩個點

連邊如下:

建好了圖之後,就可以直接套上費用流的模板跑最大流了

#include

#include

#include

using

namespace std;

#define re register

#define gc getchar()

#define ll long long

#define il inline

il ll read()

while

(ch>=

'0'&&ch<=

'9')

return x*f;

}inline ll min

(ll a,ll b)

const ll inf=(1

<<29)

,n=100010

;struct node e[n]

;ll h[n]

,cnt=

1,n,s,t;

inline

void

add(ll u,ll v,ll w,ll c)

,h[u]

=cnt;

e[++cnt]

=(node)

,h[v]

=cnt;

}#define qxx(u) for(ll i=h[u],y;y=e[i].to,i;i=e[i].next)

ll dis[n]

,vis[n]

,pre[n]

,f[n]

,maxf,minc,m;

ll spfa()

}}return pre[t]==-

1?-1

:f[t];}

void dinic (

) maxf+

=in;

minc+

=in*dis[t];}

cout<}int

main()

ll m=

read()

,t1=

read()

,m1=

read()

,t2=

read()

,m2=

read()

;for

(ll i=

1; i<=n; i++

)dinic()

;return0;

}

題解 餐巾計畫問題

orz argent 一定要注意不要調到題目裡的坑里來了,要記得脫離實際 大霧 建模方法 我覺得沒什麼好講的,真的是靈感問題,此外,這個問題可以直接無源匯上下界網路流。但是我不會 graph lr 淨1 w r,c 0 t 淨2 w r,c 0 t 淨3 w r,c 0 t 淨4 w r,c 0 t...

餐巾計畫問題

乙個餐廳在相繼的n 天裡,每天需用的餐巾數不盡相同。假設第i天需要ri塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用 為p分 或者把舊餐巾送到快洗部,洗一塊需 m天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天 n m 其費用為 s這道題是一道最小費用最大流的題目,然而有一些神犇...

餐巾計畫問題

乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f p 如m l時,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情況也如此。3 把餐巾送到慢洗部,洗一塊需n天 n m ...