題意:直線上有n個酒莊,第i個村莊對酒的需求爲ai(-1000≤ai≤1000),其中ai>0表示買酒,ai<0表示賣酒。 所有村莊供需平衡,即所有ai之和等於0。把k個單位的酒從一個村莊運到相鄰村莊需要k個單位的勞動力。 計算最少需要多少勞動力可以滿足所有村莊的需求。
思路:如果不思考直接模擬過程的話很費勁,且超時了。參考了紫書的思路!
不管是買酒還是賣酒最後這n個酒莊之和是爲0的,當然,買酒的是需求,賣酒的是消耗體力。所以當第i個酒莊的勞動力其實就是前i個酒的和的絕對值!因爲前面的值如果爲負數的話,正數要往過累計,所以這樣所有的數加起來恰好是勞動力!
醉了,有點表達不清楚。。。這種題就一定要轉換成另一個問題去求解,否則。。。
參考:紫書-例8-5-P237
代碼:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n) && n){
long long v,last = 0,ans = 0;
for(int i=0;i<n;i++){
scanf("%lld",&v);
ans += abs(last);
last += v;
}
printf("%lld\n",ans);
}
return 0;
}