題解 餐巾計畫問題

2022-02-23 20:38:05 字數 1566 閱讀 4240

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

s --w=r,c=p--> 淨1

s --w=r,c=p--> 淨2

s --w=r,c=p--> 淨3

s --w=r,c=p--> 淨4

髒1--w=r,c=0--> 髒2

髒2--w=r,c=0--> 髒3

髒3--w=r,c=0--> 髒4

s --w=r,c=0--> 髒1

s --w=r,c=0--> 髒2

s --w=r,c=0--> 髒3

s --w=r,c=0--> 髒4

髒1 --w=inf,c=s or m --> 淨2

髒1 --w=inf,c=s or m --> 淨2

保證淨到\(t\)一定滿流即可。

//@winlere

#include#include#include#include#includeusing namespace std; typedef long long ll;

inline int qr()

typedef const int& cont;

const int maxn=4e3+5;

struct e

e(cont a,cont b,cont c,cont d)

}e[maxn<<4|1];

int head[maxn];

int cnt=1;

int t,s;

const int inf=0x3f3f3f3f;

queue< int > q;

inline void add(cont fr,cont to,cont w,cont c,cont f=1)

ll d[maxn];

int fl[maxn];

int last[maxn];

int in[maxn];

int n;

inline ll mincost()}}

if(fl[t]==0)break;

ret+=d[t]*fl[t];

for(register int t=t;t!=s;t=e[last[t]^1].to)

e[last[t]].w-=fl[t],e[last[t]^1].w+=fl[t];

}return ret;

}int r[maxn];

int main()

int p,m,f,n,s;

p=qr();m=qr();f=qr();n=qr();s=qr();

for(register int t=1;t<=n;++t)

printf("%lld\n",mincost());

return 0;

}

題解 餐巾計畫問題

傳送門 乙個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir iri 塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 ppp 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 nnn 天 n mn mn m ...

餐巾計畫問題

乙個餐廳在相繼的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 ...