P4016 負載平衡問題

2022-05-05 14:15:08 字數 2770 閱讀 2472

方法二:

p4016 負載平衡問題

g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n

個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。

輸入格式

第一行乙個正整數 n,表示有 n 個倉庫。

第二行 n 個正整數,表示 n 個倉庫的庫存量。

輸出格式輸出最少搬運量。

輸入輸出樣例

輸入 #1複製

5179

1416

4

輸出 #1複製

11
說明/提示

1≤n≤100。

和網路流啥關係。。。又是老婆餅裡沒老婆?

環形均分紙牌問題,還是板子題,**都是通用的。。

貪心+數論

這種題總感覺在哪見過。。。

我們先考慮一種弱化的題目

n個倉庫排成一列,每個倉庫都有一定數量貨物a[i],只能相鄰倉庫可以傳遞貨物,問最少需要傳遞幾次才可以使各倉庫貨物相等?(就是把原題中的環改成乙個列)

總數為sum,平均每個倉庫分到t=sum/n,b[ i ]= t - a[ i ] ( b表示距離標準還有多少),只要b[i]>0就說明後面一定有b[x]<0,那當前i多餘的貨物就向後移動,其實也就是多退少補,最終移動總牌數

現在的問題是n個倉庫圍成乙個圈,我們可以通過破圈成鏈來解決這個問題。環形均分紙牌問題可以發現乙個性質:至少有兩個倉庫是不需要從彼此之間那得到卡牌,這樣就可以從這兩點破壞成鏈

如果這種方式不明白,可以看我的這個題解,有詳細分析解答

部落格講解

#include

using

namespace std;

typedef

long

long ll;

int n;

const

int maxn=

1e6+4;

ll a[maxn]

;int

main()

sum/

=n;for

(int i=n;i>

1;i--

) a[1]

=0;sort

(a+1

,a+n+1)

; ll res=0;

int mid=

(n+1)/

2;for(

int i=

1;i<=n;i++)

cout<

return0;

}

恕我才疏學淺真的是一道最小費用最大流的題目

1.源點是0,匯點是n+1,費用是指兩個相鄰倉庫中的運輸單價

2.為了讓所有倉庫都均等,我們就要讓多的倉庫送出貨物,連向源點;少的倉庫就要接受貨物,連向匯點。且連線源匯點的費用是0

3.相鄰的倉庫之間依次連上一條容量為 inf ,花費為 1 的雙向邊,

4.因為存在環的情況,所以還要特別處理1號節點與n號節點

我們用樣例做一下分析:

每個邊都有兩種顏色數字,乙個表示花費,乙個表示容量

源點為起點的邊容量之和等於以重點為邊容量之和

跑一邊費用流就可以了

#include

#include

#include

using

namespace std;

const

int maxn =

5001

;const

int maxm =

50001

;const

int inf =

2147483647

;int n, m, s, t, edge_sum =1;

int maxflow, mincost;

int dis[maxn]

, head[maxn]

, incf[maxn]

, pre[maxn]

;int a[maxn]

;bool vis[maxn]

;struct edge edge[maxm <<1]

;inline

void

addedge

(int from,

int to,

int flow,

int dis)

inline

bool

spfa()

}}}if

(dis[t]==-

1)return0;

return1;

}inline

voidek(

)}}int

main()

sum /

= n;

//算出平均值

for(

register

int i =

1; i <= n;

++i)

else

if(a[i]

> sum)

//以上為與s,t相連,以下為與臨點相連

if(i ==1)

else

} s =

0, t = n +1;

ek();

printf

("%d\n"

,mincost)

;return0;

}

洛谷P4016 負載平衡問題

問題描述 有乙個由n個沿環形鐵路分布的倉庫,每個倉庫有一定的貨物,某乙個倉庫可以往兩邊的倉庫運送貨物,求使n個倉庫貨物相等時的最小運輸量。怎麼做?這道題有很多做法,有貪心的,有二分的,有網路流的,其他的演算法相信同學們可以在其他的題解上看到,所以在這裡主要講一下網路流的做法。其實這是一道最小費用最大...

洛谷 P4016 負載平衡問題

題目描述 g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入輸出格式 輸入格式 檔案的第 1 行中有 1 個正整數 n,表示有 n 個倉庫。第 22 行中有 n 個正整數,表示 n 個...

P4016 負載平衡問題 網路流

gg 公司有 nn 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 nn個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 檔案的第 11 行中有 11 個正整數 nn,表示有 nn 個倉庫。第 22 行中有 nn 個正整數,表示 nn 個倉庫的庫...