洛谷P4016 負載平衡問題 最小費用最大流

2022-04-30 15:15:11 字數 1412 閱讀 8036

gg 公司有 nn 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 nn 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。

輸入格式:

檔案的第 11 行中有 11 個正整數 nn ,表示有 nn 個倉庫。

第 22 行中有 nn 個正整數,表示 nn 個倉庫的庫存量。

輸出格式:

輸出最少搬運量。

輸入樣例#1: 複製

5

17 9 14 16 4

輸出樣例#1: 複製

11

1 \leq n \leq 1001≤n≤100

昨天老師講課的時候總在冥冥之中感覺這題貌似做過,貌似可以用貪心水過去,看了題解發現的確可以用貪心水qwq....

網路流做法

其實很簡單,只是我太菜想的太複雜了qwq...

從s向每個點連容量為庫存量,費用為0的邊

從每個點向t連容量為平均庫存量,費用為0的邊

在相鄰兩個點之間連容量為inf,費用為1的邊

#include#include

#include

#include

#define addedge(x,y,z,f) add_edge(x,y,z,f),add_edge(y,x,-z,0)

using

namespace

std;

const

int inf=1e8+10

;const

int maxn=1e4+10

;int

n,m,s,t;

intc[maxn][maxn];

struct

node

edge[maxn];

int head[maxn],num=2

;inline

void add_edge(int x,int y,int z,int

f)int

dis[maxn],vis[maxn],pre[maxn];

bool

spfa()}}

return dis[t]}int

f()void

mcmf()

int pre(int

i)int nxt(int

i)int

main()

tot=tot/n;

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

addedge(i,t,

0,tot);

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

mcmf();

return0;

}

洛谷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,第乙個人不會再改變糖果數...