贪心练习(二) 货物搬运

题目描述

天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送。假设围绕纹川县有环行排列的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
这是一种类似于均分纸牌的变形,都是先求出平均值,利用数组进行移动,但是由于要求最小值,所以需要进行多次移动,直到找出最小值。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
    long long A[20001];
    long long B[20001];
    int N;
    long long sum=0;
    long long cha=0,su=0;
    long long max=9223372036854775807;
    cin>>N;
    for(int i=0;i<N;i++){
        cin>>A[i];
        A[i+N]=A[i];
        sum+=A[i];
    }
    long long avg=sum/N;
    for(int i=0;i<N;i++){
        su=0;
        for(int j=i;j<N+i;j++) B[j-i+1]=A[j];
        for(int k=0;k<N;k++){
            if(B[k]!=avg){
                cha=B[k]-avg;
                B[k+1]+=cha;
                B[k]=avg;
                su+=abs(cha);
            }
        }
        if(su<max) max=su;
    }
    cout<<max<<endl;
    return 0;
}

  

时间: 2024-08-08 05:31:07

贪心练习(二) 货物搬运的相关文章

货物搬运(move)

货物搬运(move) 题目描述 天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送.假设围绕纹川县有环行排列的n个救灾帐篷的存储点,每个存储点存有的帐篷数量分别是M1,M2,……,Mn,且S=M1+M2+……+Mn必为n的倍数.可以在任意一个存储点中取任意数量的帐篷搬运到相邻的存储点. 现在需要找到一种搬运方法,搬运最少的帐篷使得每个存储点中的帐篷数目相同. 例如:n=5,每个存储点帐篷的数量分别为17 9 14 16 4,我们进行如下

【题解】货物搬运

题目描述 天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送.假设围绕汶川县有环行排列的n个救灾帐篷的存储点,每个存储点存有的帐篷数量分别是M1,M2,......,Mn,且S=M1+M2+......+MN,并必为n的倍数.可以在任意一个存储点中取任意数量的帐篷搬运到相邻的存储点. 现在需要找到一种搬运方法,搬运最少的帐篷使得每个存储点中的帐篷数目相同. 例如:n=5,每个存储点帐篷的数量分别为17 9 14 16 4,我们进行如下搬

C#编程总结(二)多线程基础

C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作.要使应用程序能够快速响应用户操作,同时在用户事件之间或者甚至在用户事件期间利用处理器,最强大的方式之一是使用多线程技术. 多线程:线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.如果某个线程进行一次长延迟操作, 处理器就切换到另一个线程执行.这样,多个线程的并行(并发)执行隐藏了

软考征程之Pv操作

一.概念 1.PV操作的含义 PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1: ②如果S30,则该进程继续执行:否则该进程置为等待状态,排入等待队列. V(S):①将信号量S的值加1,即S=S+1: ②如果S>0,则该进程继续执行:否则释放队列中第一个等待信号量的进程. PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥.PV操作属于进程的低级通信. 2.进程的同步和互斥 同步:指在并发进程之

从「集装箱」思考Docker风潮

从「集装箱」思考Docker风潮 -- Docker潮流下的赢家策略 By 高焕堂 (台灣Docker聯盟 主席) 2015/02/20 前言 在许多革命性转折里,经常出现集装箱的身影:它就像幸运草一般,总是带来许多幸福和财运.现在Docker风起云涌,再现集装箱身影,如果开放视野.大力支持它,持续发挥它的潜能和力量,则幸运草就会出现在我们身旁了. 由于Docker集装箱带来的商机,其最直接的受益者是软件管理者(或称维运者),例如软件测试工具业者.测试人员等.因此在今天,不论您是开发者或是维运者

人工智能面面观(下)

本文接上篇聊聊人工智能行业应用与发展趋势. 一.行业应用 人工智能与行业领域的深度融合将改变甚至重新塑造传统行业,下面聊聊人工智能在制造.家居.金融.交通.安防.医疗.物流行业的应用 (1)智能制造 智能制造是基于新一代信息通信技术与先进制造技术深度融合,贯穿于设计. 生产.管理.服务等制造活动的各个环节,具有自感知.自学习.自决策.自执 行.自适应等功能的新型生产方式.智能制造对人工智能的需求主要表现在以下 三个方面:一是智能装备,包括自动识别设备.人机交互系统.工业机器人以及 数控机床等具体

codevs2777 栅栏的木料

题目描述 Description 农民John准备建一个栅栏来围住他的牧场.他已经确定了栅栏的形状,但是他在木料方面有些问题.当地的杂货储存商扔给John一些木板,而John必须从这些木板中找出尽可能多所需的木料. 当然,John可以切木板.因此,一个9英尺的木板可以切成一个5英尺和一个4英尺的木料 (当然也能切成3个3英尺的,等等).John有一把(完美的)梦之锯,因此他在切木料时,不会有木料的损失. 所需要的栅栏长度可能会有重复(比如,一个3英尺和另一个3英尺长的栅栏可能同时都需要).所需要

最短路问题

一 Dijkstra算法 /*HDU2544 Input 每组数据第一行是两个整数N.M(N<=100,M<=10000)N表示成都的大街上有几个路口, 标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路. N=M=0表示输入结束.接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000), 表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路. Output 对于每组输入,输出一行,表示工作人员

北京西客站火车行李托运指南

==================================北京西客站火车行李托运指南:==================================写该日志时间2011.01.24.(有效时间).托运处电话:51824244  常常忙,难打通. 客服电话:95105366 非常重要联系电话:51826253  列车查询系统行包提取处电话:51826293 地址:丰台区广莲路19号 北京西站行李托运处怎么走? 1.送货,搬运货物:(中铁快运)西客站东北角的托运处,西站往东走,200