Uva11054 Wine trading in Gergovia【例題8-5】【等價轉換】

題目:Wine trading in Gergovia

題意:直線上有n個酒莊,i個村莊對酒的需求爲ai-1000≤ai≤1000),其中ai>0表示買酒,ai<0表示賣酒。 所有村莊供需平衡,即所有ai之和等於0k個單位的酒從一個村莊運到相鄰村莊需要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;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章