直线上有\(n\)个等距村庄,每个村庄要么买酒,要么卖酒。设第\(i\)个村庄对酒的需求为\(A_i\)(\(-1000 \leqslant A_i \leqslant 1000\)),其中\(A_i>0\)表示买酒,\(A_i<0\)表示卖酒。所有村庄供需平衡,即所有\(A_i\)之和等于0。

把\(k\)个单位的酒运到相邻村庄去需要\(k\)个单位的劳动力,问最少需要多少劳动力才能满足所有的村庄的要求。输出保证在64位带符号整数范围内。

输入输出样例

输入

5
5 -4 1 -3 1
6
-1000 -1000 -1000 1000 1000 1000
0

输出

9
9000

题解

这题可以采用数学归纳法的角度进行思考,

首先,我们先看基准情形,第\(1\)个村庄对酒的需求为\(A_i\)(可能需要买,可能需要卖)。那么,不管是买酒还是卖酒,都需要第\(1\)个村庄和第\(2 \sim n\)个村庄之间存在大小为\(|A_i|\)的酒搬运(可能酒交易的双方并不是第\(1\)个村庄和第\(2\)个村庄,但是必须经由这两个村庄)。

接下来我们开始归纳,我们设\(last_i = \sum_{j=1}^{j=i}A_j\)表示第\(1 \sim i\)个村庄对酒的总需求(可能需要买,可能需要卖)。那么,不管是买酒还是卖酒,都需要第\(i\)个村庄和第\(i+1\)个村庄之间存在大小为\(|last_i|\)的酒搬运(可能部分酒交易的双方并不是第\(i+1\)和\(i\)个村庄,但是必须经由这两个村庄)。我们用\(ans_i\)表示第\(1 \sim i\)个村庄需要的总搬运需求。

综上,\(ans_i\)的递推关系式可以表述如下:

\[\begin{equation}
ans_i = \left\{
\begin{matrix}
|A_i| , \quad i = 1 \\
ans_{i - 1} + |last_i|, \quad 1 \leqslant i \leqslant n
\end{matrix}
\right.
\end{equation}
\]

如果你觉得以上的数学式子还是过于抽象,那么可以继续看下面代入值计算的例子。我们设村庄数量为\(n=4\),村庄\(1 \sim 4\)的酒需求分别是\(-3, +4, -5, +4\),那么我们模拟算法的过程如下图所示:

可以看到,最后求得的4个村庄的总共搬运劳动力\(ans_4 = 8\)。

我们再看村庄\(1 \sim 4\)的酒需求分别是\(+3, -4, +5, -4\)的情况。由上面的推导可知,这种情况其实只是把每个村庄的买卖情况取反了,但最后的总搬运量不变。我们模拟算法的过程如下图所示:

可以看到,最后求得的4个村庄的总共搬运劳动力和上面的情况一样,仍然是\(ans_4 = 8\)。由此可得,我们的算法正确。算法的Python代码实现如下:

while True:
n = int(input())
if n == 0:
break
A = list(map(int, input().strip().split()))
ans, last = 0, 0
for i in range(n):
last += A[i]
ans += abs(last)
print(ans)

UVa11054 Gergovia的酒交易(数学归纳法)的更多相关文章

  1. UVa11054 Gergovia的酒交易 Wine trading in Gergovia-递推

    https://vjudge.net/problem/UVA-11054 As you may know from the comic “Asterix and the Chieftain’s Shi ...

  2. 8-5 Wine trading in Gergovia Gergovia的酒交易 uva11054

    等价转换思维题 题意: 直线上有n(2<=n<=100000)个等距的村庄  每个村庄要么买酒 要么卖酒  设第i个村庄对酒的需求量为ai  绝对值小于一千  其中ai大于0表示买酒   ...

  3. UVa 11054 Gergovia的酒交易

    https://vjudge.net/problem/UVA-11054 题意:直线上有n个等距的村庄,每个村庄要么买酒,要么卖酒.设第i个村庄对酒的需求为ai,ai>0表示买酒,ai<0 ...

  4. UVA - 11054 Wine trading in Gergovia (Gergovia 的酒交易)(贪心+模拟)

    题意:直线上有n(2<=n<=100000)个等距的村庄,每个村庄要么买酒,要么卖酒.设第i个村庄对酒的需求为ai(-1000<=ai<=1000),其中ai>0表示买酒 ...

  5. UVA11054Gergovia的酒交易

    题意:       有n个村庄,每个村庄要么买酒要么买酒,负数是买酒,整数是买酒,题目保证所有的数字想加和为0,保证有解,然后每一个村庄往相邻的村庄运k坛酒的花费是k,问满足所有的村庄的最小花费是多少 ...

  6. BZOJ3032 七夕祭

    https://remmina.github.io/BZPRO/JudgeOnline/3032.html 题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ 今年举办了一次线 ...

  7. UVA 11054 Wine trading in Gergovia 葡萄酒交易 贪心+模拟

    题意:一题街道上很多酒店,交易葡萄酒,正数为卖出葡萄酒,负数为需要葡萄酒,总需求量和总售出量是相等的,从一家店到另外一家店需要路费(路费=距离×运算量),假设每家店线性排列且相邻两店之间距离都是1,求 ...

  8. uva11054 - Wine trading in Gergovia(等价转换,贪心法)

    这个题看上去麻烦,实际上只要想清楚就很简单.关键是要有一种等价转换的思维方式.其实题意就是个一排数,最后通过相邻的互相移动加减使得所有数都变成零,移动过程中每次都耗费相应值,让耗费的值最小.虽然从实际 ...

  9. UVA 11054 Wine trading in Gergovia(思维)

    题目链接: https://vjudge.net/problem/UVA-11054 /* 问题 输入村庄的个数n(2=<n<=100000)和n个村庄的数值,正代表买酒,负代表卖酒,k个 ...

随机推荐

  1. jquery 选择器 模糊匹配

    根据name值匹配 1.查询前缀为aa的数据 $("div[name^='aa']"); 2.查询后缀为aa的所有div的jquery对象 $("div[name$='a ...

  2. UVA 10887 set或hash

    题意: 给出n个A串和m个B串,将这A串与B串连接(B接在A后面)可以生成n*m个AB串,求不同的AB串的数量 分析: set直接水过 #include <bits/stdc++.h> u ...

  3. 1.5Java、万维网以及其他

    要点提示:Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备.台式计算机以及服务器端的软件.

  4. 应用CRM的自动化功能为什么备受推崇

    相信每个销售团队都遇到过这样的问题:在跟进新客户的时候顾此失彼,在跟踪一个客户的时候,转眼就忘记了另一个客户.这种情况很常见,但是每个新客户都有潜在的价值,我们该如何做,才能避免错失商机?CRM客户管 ...

  5. Cygwin-OpenSSH配置手册及常见问题解决

    右键管理员方式运行Cygwin-setup-x86_64.exe 选择Install from Local Ddirectory 选择安装路径(默认下一步) 选择依赖库路径 依次配置一下选项 接下来安 ...

  6. AcWing 1273. 天才的记忆

    从前有个人名叫 WNB,他有着天才般的记忆力,他珍藏了许多许多的宝藏. 在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松回答出这个问题,便可以继承他的宝藏. 题目是这样的:给你一大串 ...

  7. js--你需要知道的字符串使用方法(含es6及之后)

    前言 字符串作为 JavScript 的基本数据类型,在开发以及面试过程中作为程序员对基础掌握情况的重要考点,本文来总结一下字符串的相关属性以及用法.包含了ES6中的一些新语法特性. 正文 1.字符串 ...

  8. 在 Docker 上配置 Oracle

    地址:https://github.com/wnameless/docker-oracle-xe-11g .直接 git clone 到本地就行了 ##安装 docker shell 下: docke ...

  9. MySQL参数配置

    参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名(用于连接数据库) 所有版本 passWord 用户密码(用于连接数据库) 所有版本 useUnicode 是否使用Unicode字符集 ...

  10. linux中如何添加用户并赋予root权限详解

    #adduser username 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to run any commands anyw ...