题目的意思是:n个村庄,每一个村庄可能需要买酒或者卖酒,ai 为负,则需要买 ai 个酒,ai 为正,则需要卖 ai 个酒,从一个村庄运k单位酒到邻村需要k个单位的劳动力。求最小劳动力。
考虑最左边的村庄。如果需要买酒,即a1大于0,则一定有劳动力从村庄2往左运给村庄1,而不管这些酒是从哪里来的。这样,问题就等价于只有村庄2~n,且第2个村庄的需求为a1+a2的情形。ai < 0时劳动力同样需要|ai| 。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
while(cin >> n && n)
{
long long ans = 0, last = 0, a;
for(int i = 0; i < n; i++)
{
cin >> a;
ans += abs(last);
last += a;
}
cout << ans << endl;
}
return 0;
}