下面是刘汝佳《算法竞赛入门经典》(第2版)书上原始内容,讲解非常清晰, 直接放在这里:
下面这个算法也是贪心策略,具体证明紫书讲解比较清楚,不必赘述,具体实现如下:
Huffman编码
Wine trading in Gergovia UVA - 11054
【分析】
此题思路非常好,一定要让相邻的两个村庄做交易,这就是贪心策略,从最左边或者最右边的村庄考虑都可以,这里从最左边的村庄考虑,村庄1无论买还是卖都必定需要从右边村庄买和卖,运送必定经过村庄2,也就是说必定由于从村庄1运到村庄2花费掉村庄1的所需或所供的酒水的数量个劳动力,必定先让村庄1和村庄2合并(不论能否做交易),所需所供之和的绝对值就必定成为由于从村庄3运往村庄2所需要的劳动力数量,以此类推,次次贪心选择,问题解决,思路非常好!
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
while(cin>>n && n){
long long ans=0,last=0,x;
for(int i=0;i<n;i++){
cin>>x;
ans+=abs(last);
last+=x;
}
cout<<ans<<endl;
}
return 0;
}