码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-03 17:47:31      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:blank   http   处理   答案   ...   代码   买卖   href   git   

难度:β+

建议用时: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 题解 + 算法分析

标签:blank   http   处理   答案   ...   代码   买卖   href   git   

原文地址:https://www.cnblogs.com/Alrond/p/8409958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!