UVa 11054 例题8-5 Gergovia的酒交易

来源:互联网 发布:python xgboost 编辑:程序博客网 时间:2024/04/30 15:55

原题链接: UVa-11054

题目大意:

  一个形状是一条直线的村庄(别问为什么他们的村庄是条直线,我也不知道,可能他们的次元是一维的吧),这还不算奇怪,更奇怪的是,这个村庄所有的经济活动就只有买酒和卖酒,每家人每天早上起来第一件事情就是觉得今天都要决定两件事:1、卖酒还是买酒 2、多少酒。而且每天都能供销平衡(神奇吧!),而且卖家和买家都不挑。但是一直以来有个问题,送酒需要人力,但是他们都特别懒,不想多跑,所以他们想让你帮他们设计一种每天送酒的方式能让他们耗费的人力(一人力是送一桶酒到一个相邻村庄耗费的能力)最少。(MDZZ)

解题思路:

 看完题觉得应该用贪心算法,但是不知道该怎么贪,就看了紫书给的分析。瞬间茅塞(ce)顿开,思路一泻千里。


 理论:假设最左边的那一户a今天很懒,不想做酒了,决定今天买酒a桶,无论怎么样,肯定是要用从他右侧邻居b那里得到a桶,假设他的邻居家要b桶,则他的邻居b肯定要从b右侧的邻居那里得到a+b(自己需要的和a需要的)。当a户决定卖酒时也是一样的这时a是负的,但是同样需要a个人力运送酒到b。只是方向不一样,不过方向无关紧要。这样就能算出来最少(最少是因为肯定是从自己邻居那里得到酒,需要的人力才是最少的)需要多少人力。

代码:

//E8-5 UVa11054 AC #include<iostream>#include<cmath>using namespace std;int main(){int n, num, m = 0;while (cin >> n && n) {long long cnt = 0;while (n--) {cin >> num;m += num;cnt += abs(m);}cout << cnt << endl;}return 0;}




原创粉丝点击