把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;
}