網路流24題 餐巾計畫(DCOJ8008)

2022-06-03 21:54:08 字數 1788 閱讀 2870

題目描述

乙個餐廳在相繼的 n nn 天裡,每天需用的餐巾數不盡相同。假設第 i ii 天需要 ri r_ir​i​​ 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 p pp 分;或者把舊餐巾送到快洗部,洗一塊需 m mm 天,其費用為 f ff 分;或者送到慢洗部,洗一塊需 n nn 天,其費用為 s ss 分(ss每天結束時,餐廳必須決定將多少塊髒的餐巾送到快洗部,多少塊餐巾送到慢洗部,以及多少塊儲存起來延期送洗。但是每天洗好的餐巾和購買的新餐巾數之和,要滿足當天的需求量。

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

輸入格式

第 1 11 行有 6 66 個正整數 n nn、p pp、m mm、f ff、n nn、s ss。

n nn 是要安排餐巾使用計畫的天數,p pp 是每塊新餐巾的費用,m mm 是快洗部洗一塊餐巾需用天數,f ff 是快洗部洗一塊餐巾需要的費用,n nn 是慢洗部洗一塊餐巾需用天數,s ss 是慢洗部洗一塊餐巾需要的費用。

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

輸出格式

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

樣例樣例輸入

3 10 2 3 3 256

7

樣例輸出

145

資料範圍與提示

1≤n≤1000 1 \leq n \leq 10001≤n≤1000

這是我碰到的第一道想了至少二十分鐘才理解的網路流題。

主要是要把當天要用的和當天用過的(沒洗的)分開來,弄成不同的兩個點,然後就可以從某天用過沒洗的點向n天或m天後要用的點連邊,費用為洗衣費用。

從源點向每個當天用過的(沒洗的)的點連邊,最大流量為當天要用的值。

從每個當天要用的的點向匯點連邊,最大流量為當天要用的值。

從每個第i天用過的(沒洗的)的點向第i+1天用過的(沒洗的)的點連邊,最大流量為inf。

從源點向每個當天要用的的點連邊,邊長inf,費用為p(購買費用)。

別人優雅的部落格

//serene

#include#include#include#include#include#includeusing namespace std;

const int maxn=2000+10,maxm=6*maxn+10,inf=0x3f3f3f3f;

int day,p,m,f,n,r,s,t;

int aa;char cc;

int read()

struct node

node(int x,int y,int cap,int w):x(x),y(y),cap(cap),w(w){}

}node[2*maxm];

int fir[maxn],nxt[2*maxm],e=1;

void add(int x,int y,int z,int w)

int from[maxn],zz[maxn],dis[maxn];

bool vis[maxn];

bool spfa()

}s++;vis[x]=0;

}return dis[t]!=inf;}

int now,rs1=0,rs2=0;

int mcmf()

}return rs2;}

int main()

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

printf("%d",mcmf());

return 0;

}

網路流 24 題 餐巾計畫

這道題目很關鍵的一點就是,要明白用的餐巾和洗的餐巾是兩個系統。所以我們把每一天所用餐巾直接用乙個源點和匯點連線。解決第乙個系統。此時可能會洗餐巾,所以我們另起乙個點,從源點每一天引出髒的餐巾,數目依然是當天所用的餐巾數量,然後從這個點連線到m天後的第一系統的點和n天後第一系統的點,費用分別為f和s,...

網路流24題 餐巾計畫

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

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

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