餐巾計畫問題 網路流24題 費用流 zkw

2022-05-18 05:45:54 字數 2538 閱讀 8026

乙個餐廳在相繼的 nn 天裡,每天需用的餐巾數不盡相同。假設第 ii 天需要 r_iri​塊餐巾( i=1,2,...,n)。餐廳可以購買新的餐巾,每塊餐巾的費用為 pp 分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分;或者送到慢洗部,洗一塊需 nn 天(n>mn>m),其費用為 ss 分(ss

每天結束時,餐廳必須決定將多少塊髒的餐巾送到快洗部,多少塊餐巾送到慢洗部,以及多少塊儲存起來延期送洗。但是每天洗好的餐巾和購買的新餐巾數之和,要滿足當天的需求量。

試設計乙個演算法為餐廳合理地安排好 nn 天中餐巾使用計畫,使總的花費最小。程式設計找出乙個最佳餐巾使用計畫。

由標準輸入提供輸入資料。檔案第 1 行有 1 個正整數 nn,代表要安排餐巾使用計畫的天數。

接下來的一行是餐廳在相繼的 nn 天裡,每天需用的餐巾數。

最後一行包含5個正整數p,m,f,n,sp,m,f,n,s。pp 是每塊新餐巾的費用; mm 是快洗部洗一塊餐巾需用天數; ff 是快洗部洗一塊餐巾需要的費用; nn 是慢洗部洗一塊餐巾需用天數; ss 是慢洗部洗一塊餐巾需要的費用。

將餐廳在相繼的 n 天裡使用餐巾的最小總花費輸出

輸入 #1複製

3
1 7 5

11 2 2 3 1

輸出 #1複製

134
n<=2000

ri<=10000000

p,f,s<=10000

時限4s

思路

如何建圖:

首先,因為有兩類狀態——乾淨和髒毛巾,考慮把日期拆成毛巾的使用量和需求量。

如果用最樸素的建圖方法:

會發現,每天的髒毛巾是可以存起來等到下一次一起洗,就會導致乙個問題,容量 a [ i ]  的限制會導致最後取到的不是所有毛巾的總花費。

如何讓每條毛巾的花費都被算上,就要考慮怎樣跑滿最大流的問題。

顯然我們可以針對上圖的缺點來重新考慮建圖:

如此一來,就滿足了基本的條件:髒毛巾留到下一天的髒毛巾,髒毛巾送去洗,購置新毛巾,同時由於兩種量之間的關係不再是線性轉移,保證了能跑滿最大流。

然後上 zkw 跑 mcmf即可。

code

#include

<

bits/stdc++.h

>

using

namespace std;

#define

intlong

long

template

<

class t>

inline

void

read(t &

res)

const

int maxn =2e

3+5;

const

int inf =

0x3f3f3f3f

;int n;

struct edge

};edge *

head

[maxn <<1];

void

buildgraph(

intu

,intv,

intw

,intc)

namespace zkw}}

}return

dis[t]

}int

dfs(

intu

,int

flow

)int used =0;

vis[u]

=true

;for

(edge *e =

head

[u]; e; e =

e->

next)if

(used == flow)

break;}}

return used;

}void

work()}}

}signed

main()

int p, m, f, n, s;

read(p);

read(m);

read(f);

read(n);

read(s);

for(

int i =

1; i <= n;

++i )

zkw ::

work();

cout <

return0;

}

網路流24題 餐巾計畫(費用流)

乙個餐廳在相繼的 n 天裡,每天需用的餐巾數不盡相同。假設第 i天需要 ri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天,其費用為 s 分 s f 每天結束時,餐廳必須決定將多少塊髒的餐巾送到快...

網路流24題 餐巾計畫問題

傳送門 這個題我一開始沒把tot賦值成 1,然後調了1h。然後只拿了20,看了題解才知道漏了一種情況,那就是其實餐巾是可以留到第二天的。然後就沒了。對了,忘說做法了 尷尬 其實就是拆點,分別連邊,實現題目中的三種操作,具體可以看我的 include include include include i...

網路流24題餐巾計畫問題

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