货物搬运
Posted scott527407973
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了货物搬运相关的知识,希望对你有一定的参考价值。
题目描述
天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送。假设围绕纹川县有环行排列的n个救灾帐篷的存储点,每个存储点存有的帐篷数量分别是M1,M2,……,Mn,且S=M1+M2+……+Mn必为n的倍数。可以在任意一个存储点中取任意数量的帐篷搬运到相邻的存储点。
现在需要找到一种搬运方法,搬运最少的帐篷使得每个存储点中的帐篷数目相同。
例如:n=5,每个存储点帐篷的数量分别为17 9 14 16 4,我们进行如下搬运:
(1)存储点①向存储点②搬运1个帐篷;
(2)存储点①向存储点⑤搬运4个帐篷;
(3)存储点③向存储点②搬运2个帐篷;
(4)存储点④向存储点⑤搬运4个帐篷。
搬运帐篷的总数是1+4+2+4=11,并且可以证明这是最佳搬运方法。
现在需要找到一种搬运方法,搬运最少的帐篷使得每个存储点中的帐篷数目相同。
例如:n=5,每个存储点帐篷的数量分别为17 9 14 16 4,我们进行如下搬运:
(1)存储点①向存储点②搬运1个帐篷;
(2)存储点①向存储点⑤搬运4个帐篷;
(3)存储点③向存储点②搬运2个帐篷;
(4)存储点④向存储点⑤搬运4个帐篷。
搬运帐篷的总数是1+4+2+4=11,并且可以证明这是最佳搬运方法。
输入
第1行一个正整数n(n≤10000),表示有n个存储点;
第2行n个整数(integer范围),表示n个存储点中帐篷数量。
第2行n个整数(integer范围),表示n个存储点中帐篷数量。
输出
一个整数,表示最少搬运的帐篷数量。
样例输入
5
17 9 14 16 4
样例输出
11
1 #include <bits/stdc++.h> 2 #define FOP freopen("in.txt","r",stdin) 3 using namespace std; 4 5 typedef long long ll; 6 ll n,a[100005],b[100005],sum,ave; 7 int main() 8 { 9 cin>>n; 10 for(int i=0;i<n;i++) 11 { 12 cin>>a[i]; 13 a[i+n]=a[i]; 14 sum+=a[i]; 15 } 16 ave=sum/n; 17 ll minn=0x3f3f3f3f,tmp,ttmp; 18 for(int i=0;i<n;i++) 19 { 20 ttmp=0; 21 for(int j=i;j<i+n;j++) b[j-i]=a[j]; 22 for(int k=0;k<n;k++) 23 { 24 if(b[k]!=ave) 25 { 26 tmp=b[k]-ave; 27 b[k+1]+=tmp; 28 b[k]=ave; 29 ttmp+=abs(tmp); 30 } 31 } 32 minn=min(ttmp,minn); 33 } 34 cout<<minn<<endl; 35 return 0; 36 }
以上是关于货物搬运的主要内容,如果未能解决你的问题,请参考以下文章