UVA 11054 - Wine trading in Gergovia

来源:互联网 发布:手机游戏网络加速器 编辑:程序博客网 时间:2024/06/05 11:27

把k个单位的酒从一个村庄运到相邻村庄需要k个单位的劳动力。
问最少需要多少劳动力可以满足所有村庄的需求?
由于所有位置的和一定为0,令最左端的位置为a1
1、如果a1 > 0 那么a1买的酒一定需要经过a2才能到达,a2到a1需要的劳动力也就可以求出了,即:abs(a1)。
然后就把求a1到an需要的劳动力,转换为a2到an需要的劳动力 + abs(ai)
此时a2需要更新为a1 + a2的和。

#include <stdio.h>long long abss(long long x){    if(x < 0) return -x;    return x;}int main(){    int n;    int a[100005];    while(scanf("%d", &n), n)    {        for(int i = 0; i < n; i++)        {            scanf("%d", &a[i]);        }        long long k = 0;        long long ans = 0;        for(int i = 0; i < n; i++)        {            k += a[i];            ans += abss(k);        }        printf("%lld\n", ans);    }    return 0;}
0 0