演算法實現題8-10 餐巾計畫問題(習題8-21)
«問題描述:
乙個餐廳在相繼的n 天裡,每天需用的餐巾數不盡相同。假設第i天需要ri塊餐巾(i=1,
2,…,n)。餐廳可以購買新的餐巾,每塊餐巾的費用為p分;或者把舊餐巾送到快洗部,
洗一塊需m天,其費用為f 分;或者送到慢洗部,洗一塊需n 天(n>m),其費用為s«程式設計任務:
程式設計找出乙個最佳餐巾使用計畫.
«資料輸入:
由檔案input.txt提供輸入資料。檔案第1 行有6 個正整數n,p,m,f,n,s。n 是要安排餐巾
使用計畫的天數;p 是每塊新餐巾的費用;m 是快洗部洗一塊餐巾需用天數;f 是快洗部洗
一塊餐巾需要的費用;n是慢洗部洗一塊餐巾需用天數;s是慢洗部洗一塊餐巾需要的費用。
接下來的n 行是餐廳在相繼的n 天裡,每天需用的餐巾數。
«結果輸出:
程式執行結束時,將餐廳在相繼的n 天裡使用餐巾的最小總花費輸出到檔案output.txt
中。輸入檔案示例 輸出檔案示例
input.txt
3 10 2 3 3 256
7output.txt
145【建模方法】
經典構圖題。將每一天拆成兩個點i, i』,加如下6條邊:
(s, i, ri, p)——在第i天可以買至多ri個餐巾,每塊p分;
(i, t, ri, 0)——第i天要用ri塊餐巾;
(s, i』, ri, 0)——第i天用剩的ri塊舊餐巾;
(i』, i+m, ∞, f)——第i天的舊餐巾送到快洗部,每塊f分;
(i』, i+n, ∞, s)——第i天的舊餐巾送到慢洗部,每塊s分;
(i』, i』+1, ∞, 0)——第i天的舊餐巾可以留到第i+1天再處理;
求一次最小費用流即為結果。(引自《網路流建模彙總》by edelweiss)
code如下:
#include#include#include#define inf 0x3f3f3f3fusing namespace std;
int n,p,m,f,n,s,s,t,ecnt,ans,first[2100],nxt[1000100];
struct edgee[1000100];
bool vis[2100];
int d[2100],q[2100];
void link(int a,int b,int w,int c)
bool spfa()
}vis[now]=false;
}return d[s]^inf;
}int dfs(int x,int f)
return used;
}void zkw()
}}int main()
zkw();
printf("%d\n",ans);
return 0;
}
線性規劃與網路流24 餐巾計畫問題
題目鏈結點這裡 犯了個智障錯誤,找錯找了一上午,最小費用問題,建模對於我這種菜雞有點難想到。大概這樣建模 把第i天,分為2個點 xi和yi 1 從s向每個xi連一條容量為ri,費用為0的邊。2 從每個yi向t連一條容量為ri,費用為0的邊。3 從s向每個yi連一條容量為無窮大,費用為p的邊。4 從每...
線性規劃與網路流24題 17 運輸問題
description w公司有m個倉庫和n 個零售商店。第i 個倉庫有ai個單位的貨物 第j個零售商店需要bj個單位的貨物。貨物供需平衡,即sigma ai sigma bj 從第i個倉庫運送每單位貨物到第j個零售商店的費用為cij。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,使總運輸費用...
線性規劃與網路流24題 4 魔術球
線性規劃與網路流24題 4 魔術球 description 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根...