餐巾計畫問題

2021-08-11 12:09:57 字數 1996 閱讀 2398

乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾(i=l,2,…,n)。餐廳可以從三種途徑獲得餐巾。

(1)購買新的餐巾,每塊需p分;

(2)把用過的餐巾送到快洗部,洗一塊需m天,費用需f分(f<p)。如m=l時,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情況也如此。

(3)把餐巾送到慢洗部,洗一塊需n天(n>m),費用需s分(s<f)。

在每天結束時,餐廳必須決定多少塊用過的餐巾送到快洗部,多少塊送慢洗部。在每天開始時,餐廳必須決定是否購買新餐巾及多少,使洗好的和新購的餐巾之和滿足當天的需求量ri,並使n天總的費用最小

輸入格式:

輸入檔案共3行,第1行為總天數;第2行為每天所需的餐巾塊數;第3行為每塊餐巾的新購費用p,快洗所需天數m,快洗所需費用f,慢洗所需天數n,慢洗所需費用s。

輸出格式:

輸出檔案共1行為最小的費用。

這道題比起數字梯形要難上不少。。在方格取數里我們學到了把乙個點拆成2個點,兩個點之間連兩條邊乙個限制費用次數,另外乙個正常走。

這道題中,我們匯點顯然連得是每天需求的盤子。但是中間怎麼弄呢。。

把乙個點拆成兩個點後,我們來考慮,源點和匯點分別連入還是出(例如最小路徑覆蓋中源點連出)

在這題中,源點如果連入點(一天的開始),那麼一天的結束連匯點。可是結束之後我還要去洗盤子啊。。

怎麼辦?似乎沒法辦。

我們把一天的結束連到匯點,一天的開始連到源點。那麼流入源點的東西是什麼呢?顯然還是那些需求的盤子(等等我寫到這的時候突然感覺,需求的盤子明明就是應該由一天的結束來決定的啊,所以應該流入匯點)。

那麼從源點流入結束的是什麼,還是那些盤子,不過是已經用過需要洗的。

所以結束可以向開始連邊,就是洗盤子~費用就是洗盤子的費用,容量是inf(因為最大流是根據流出即使用的盤子來決定的)。

。。那麼問題來了,這樣的話盤子不夠(達不到滿流)怎麼辦(需要買盤子):直接由s連入一天開始,費用是買盤子,可以買inf個。

好的交上去,wa了8個點。。。為什麼。

我們來找一下邏輯的漏洞。一天結束洗好的盤子流入了另一天的新盤子中,看似沒什麼問題啊。。但是,如果那一天所需的盤子小於洗好的盤子的,剩下的盤子怎麼辦。。還要流入別的地方呀。。所以,我們把這一天的盤子留到明天洗,向下一天連一條容量為inf,費用為0的邊。(為什麼不會先走這個?因為先走這個顯然不能達成最大流)。

所以這道題就結束辣。

#include

using

namespace

std;

#define ll long long

const ll inf=1e9;

const

int maxn=2e5+5;

const

int base=1e5;

struct edgee[maxn<<1];

int cnt=1,head[maxn];

inline

void add(ll u,ll v,ll w,ll cost),head[u]=cnt;}

ll dis[maxn],pre[maxn];

bool vis[maxn];

queue

q;ll n,p,s,t;

ll dayfast,flowfast,dayslow,flowslow;

bool spfa(int x)}}

}}

if(dis[t]==inf)return

0; return

1;

}ll mf()

for(int i=pre[t];i;i=pre[e[i].u])

}return cost;

}int main()

scanf("%lld%lld%lld%lld%lld",&p,&dayfast,&flowfast,&dayslow,&flowslow);

for(int i=1;i<=n;i++)

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

return

0;}

餐巾計畫問題

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

餐巾計畫問題

餐巾計畫問題 time limit 1000 ms memory limit 65536 kb description 乙個餐廳在相繼的n 天裡,每天需用的餐巾數不盡相同。假設第i天需要ri塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為p分 或者把舊餐巾送到快洗部,洗一塊需m天,其費...

題解 餐巾計畫問題

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