方法二:
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 個倉庫的庫...