您的位置:首页 > 编程语言 > Go语言

UVa 11054 Wine trading in Gergovia【贪心】

2015-03-23 20:38 411 查看
题意:给出n个等距离的村庄,每个村庄要么买酒,要么卖酒,买酒和卖酒的总量相等,

把k个单位的酒从一个村庄运送到相邻的村庄,需要耗费k个单位劳动力,问怎样运送酒使得耗费的劳动力最少

买 卖 买 卖 买

5 -4 1 -3 1

可以从样例来模拟,第一个村庄需要买5桶酒,这5桶酒都是从右边的别的村庄运过来的,第二个村庄需要卖4桶酒,

那么可以这样想,第一个和第二个村庄捆绑在一起的需求量为 a1+a2,而a1+a2又是从别的村庄运送过来的

再比如说

第一个村庄买的是5,那么需要5个劳动力运过来,

第二个村庄卖的是4,那么是它运过来的,

所以这一趟只满足了4桶酒,剩下的1继续累加,直到遇到负数把它抵消,说明又有酒运过来了

感觉是一个村庄一个村庄累积= =纸上模拟一下样例好理解点= =

#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
#define mod=1e9+7;
using namespace std;

typedef long long LL;

int main(){
int n;
while(cin>>n&&n){
LL ans=0,last=0,a;
for(int i=0;i<n;i++){
cin>>a;
ans+=abs(last);
last+=a;
printf("last=%d\n",last);
}
cout<<ans<<"\n";
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: