UVa 11054 Wine trading in Gergovia【贪心】

题意:给出n个等距离的村庄,每个村庄要么买酒,要么卖酒,买酒和卖酒的总量相等,

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

买     卖          买        卖        买

5      -4          1         -3        1

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

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

再比如说

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

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

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

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

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath> 
 5 #include<stack>
 6 #include<vector>
 7 #include<map> 
 8 #include<set>
 9 #include<queue> 
10 #include<algorithm>  
11 #define mod=1e9+7;
12 using namespace std;
13 
14 typedef long long LL;
15 
16 int main(){
17     int n;
18     while(cin>>n&&n){
19         LL ans=0,last=0,a;
20         for(int i=0;i<n;i++){
21             cin>>a;
22             ans+=abs(last);
23             last+=a;
24             printf("last=%d
",last);            
25         }
26         cout<<ans<<"
";
27     }
28     return 0;
29 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4360940.html