洛谷 1251 餐巾計畫問題

2022-03-18 06:24:30 字數 1808 閱讀 3649

●題鏈:

●題解:

一點啟示:建圖時要考慮到流量問題,即為了方便使用最小費用最大流演算法,要把流量最大時為最終目的考慮進建圖。

拆點,每天拆為兩個點i, i',表示每天開始和每天結束

(s,i,ai,p):在第i天最多買ri個餐巾,花費為p;

(i,t,ai,0):第i天要用ai塊餐巾;

(s,i',ai,0):第i天用剩的ai塊舊餐巾;

(i',i+m,inf,f):第i天的舊餐巾送到快洗部,花費為f;

(i',i+n,inf,s):第i天的舊餐巾送到慢洗部,花費為s;

(i,i+1,inf,0):第i天的沒用的餐巾可以留到第i+1天去用。

spfa費用流:

#include#include#include#include#define maxn 2050

#define inf 0x3f3f3f3f

using namespace std;

struct edge

void adde(int u,int v,int w,int c)

int next(int i,bool type)

}e;int a[maxn];

int day,p,m,f,n,s,ss,tt;

int idx(int i,int k)

bool spfa(long long &cost)

} if(dis[tt]==inf) return 0;

int u=tt; cost+=1ll*flow[tt]*dis[tt];

while(u!=ss)

return 1;

}long long mincost_maxflow()

int main()

scanf("%d%d%d%d%d",&p,&m,&f,&n,&s);

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

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

long long ans=mincost_maxflow();

printf("%lld",ans);

return 0;

}

zkw(dinic實現)費用流:

#include#include#include#include#define maxn 2050

#define inf 0x3f3f3f3f

using namespace std;

struct edge

void adde(int u,int v,int w,int c)

int next(int i,bool type)

}e;int a[maxn],cur[maxn*2],dis[maxn*2];

int day,p,m,f,n,s,ss,tt;

int idx(int i,int k)

bool spfa()

} return dis[ss]}int dfs(int u,int reflow)

return flowout;

}long long zkw_mincost()

return cost;

}int main()

scanf("%d%d%d%d%d",&p,&m,&f,&n,&s);

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

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

long long ans=zkw_mincost();

printf("%lld",ans);

return 0;

}

洛谷 P1251 餐巾計畫問題

吃什麼 先說建圖 經典構圖題。將每一天拆成兩個點i,i 加如下6條邊 s i,r i,p 在第 i 天可以買至多ri 個餐巾,每塊 p 分 i t,r i,0 第i 天要用ri 塊餐巾 s i ri,0 第 i 天用剩的ri 塊舊餐巾 i i m,f 第 i 天的舊餐巾送到快洗部,每塊 f分 i i...

洛谷 1251 餐巾計畫問題 費用流SPFA

題目鏈結 每一天的餐巾需求相當於必須遍歷某些點若干次 設q i 為dayi需求量 x,y 表示邊x容y費 將每個點i拆成i,i 由i t連 q i 0 的邊,表示求最大流的話一定要流滿q i 對於i,由s i連 q i 0 的邊,表示滿足dayi需求後最多還能給出q i 塊餐巾 感覺inf好像als...

洛谷 P1251餐巾計畫問題 題解

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