• 货物搬运


    题目描述

    天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送。假设围绕纹川县有环行排列的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,并且可以证明这是最佳搬运方法。

    输入

    第1行一个正整数n(n≤10000),表示有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 }
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    Sigmoid函数
    Softmax分类器
    正则化惩罚项
    损失函数
    交叉验证
    超参数
    IMAGENET
    hdu 2767 Proving Equivalences 强连通
    hdu 4587 TWO NODES 关节点
    hdu 3635 Dragon Balls 并查集
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9417405.html
Copyright © 2020-2023  润新知