UVa 11054 Wine Trading in Gergovia 题解 + 算法分析

Posted alrond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 11054 Wine Trading in Gergovia 题解 + 算法分析相关的知识,希望对你有一定的参考价值。

难度:β+

建议用时:20 min

实际用时:5 min

题目:??

代码:??

 

这题很经典很经典。

 

我之前用网络流的方法做了一个(按道理这题是网络流 24 题里的一个)。

 

然而这题是有简单(咳咳)解法的。

 

简单是指代码简短,但是里面的东西要花时间想一想。

 

题目大意是有一些村庄要买卖酒。有的只卖,有的只买。问最少的运酒花费是多少?如果把一瓶酒从一个村庄运到相邻的村庄,花费 1 元钱。

 

这题我乍一看还真不知道怎么处理(除了网络流暴力解法以外)。

然而看过大神的做法后,想了一点东西。

 

如果不看每瓶酒是怎样的运输方法(这样不好找内在联系),而是看每个村庄转手酒的数量。

会发现在每一种转运酒的方法里面,每个村庄转手酒的数量有规律。

如果有两瓶酒经过一个村庄(包括那些继续运走的和停在这个村庄的),那么这个村庄转手酒的数量就是 2。

如果一瓶酒经过两个村庄,那么它就使得这两个村庄转手酒的数量各加上一。

所以这就给了我们另一种解题的灵感。

如果换个角度,看每个村庄转手酒的数目,也可以统计出花费。

那么我们只要找到每个村庄转手酒的数目之和的最小值。

 

这个最小值是多少呢?

不难发现,如果以某一村庄 x 为分界线,x 左边的需求量为 q1,x 右边的需求量加上 x 本身的需求量为 q2,那么有 q1 + q2 = 0。

显然的,经手村庄 x 的酒最少要满足左边村庄的需求量 |q1|。这就是我们要的最小值。

答案就是 ∑(|qi|),qi = ∑ ai, i = 1, 2, 3, ..., i。(这里的 q 不同于上面的 q1,q2)

 

2018-02-03

以上是关于UVa 11054 Wine Trading in Gergovia 题解 + 算法分析的主要内容,如果未能解决你的问题,请参考以下文章

UVA 11054 Wine trading in Gergovia(思维)

UVA11054 Wine trading in Gergovia

UVa 11054 Wine Trading in Gergovia 题解 + 算法分析

uva 11054Wine trading in Gergovia(算法效率--等价转换)

UVA 11054 Gergovia的酒交易 Wine trading in Gergovia

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