g公司有 n個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。
輸入格式:
檔案的第 1行中有 1個正整數 n,表示有 n 個倉庫。
第 2行中有 n 個正整數,表示 n 個倉庫的庫存量。
輸出格式:
輸出最少搬運量。
輸入樣例#1: 複製
517 9 14 16 4
輸出樣例#1: 複製
11
1≤n≤100
題解:計算平均每個點的量,然後看當前點是流入還是流出,流出與超級源點連線,流入與匯點相連,將每個點拆分點兩個點xi,yi。xi 與yi相連流量inf,費用為0,然後每個點與相鄰兩個點連線,xi-xi-1,yi-yi+1,相連線
#includeusing namespace std;#define ll long long
const int maxn= 20000+10;
const int inf=0x3f3f3f3;
struct edge
};struct mcmf
void addedge(int from, int to,int cap,int cost)
bool bellmanford(int s,int t,int &flow,long long &cost)}}
}if(d[t]==int_max) return false;
flow+=a[t];
cost+=(long long)d[t]*(long long )a[t];
for (int u = t; u !=s ; u=edges[p[u]].from)
return true;
}int mincostmaxflow(int s,int t,long long &cost)
};int d[200],xx[200];
int main()
sum=sum/n;
for (int i = 1; i <=n ; ++i)
mcmf m;
m.init(n+n+2);
for (int i = 1; i <=n ; ++i)
if(d[i]<0)
if(i==1)
else
if(i==n)
else
}ll cost=0;
m.mincostmaxflow(0,n+n+1,cost);
printf("%lld\n",cost);
return 0;
}
洛谷P4016 負載平衡問題
問題描述 有乙個由n個沿環形鐵路分布的倉庫,每個倉庫有一定的貨物,某乙個倉庫可以往兩邊的倉庫運送貨物,求使n個倉庫貨物相等時的最小運輸量。怎麼做?這道題有很多做法,有貪心的,有二分的,有網路流的,其他的演算法相信同學們可以在其他的題解上看到,所以在這裡主要講一下網路流的做法。其實這是一道最小費用最大...
洛谷 P4016 負載平衡問題
題目描述 g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入輸出格式 輸入格式 檔案的第 1 行中有 1 個正整數 n,表示有 n 個倉庫。第 22 行中有 n 個正整數,表示 n 個...
洛谷 P4016 負載平衡問題
第一眼看見覺得和均分紙牌差不多,然而因為這是環形的,並不能用均分紙牌的方法做,但是均分紙牌的思想仍然適用 首先我們假設平均數為sum1。那麼對於第1個人,我們假設他給第n個人k個糖果,第2個人給1 第3個人給2 第n個人給第n 1個人 那麼對於第1個人給完n,第2個人給完1,第乙個人不會再改變糖果數...