uva-11054-模拟

题意:一条街有许多卖酒的店,有些店需要进酒,有些店需要出酒,所有的店的需求总和为0,问怎么移动,使酒的移动总和最少。

模拟,考虑一家店的需求为xi,无论是从左或者是从右或者其他形式,让xi->0的花费总是xi.所以只要从左往右开始计算每家的花费,或者从右往左也行.

这样算是最容易的方式.

#include "pch.h"
#include <string>
#include<iostream>
#include<map>
#include<memory.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<math.h>
#include<iomanip>
#include<bitset>

namespace cc
{
    using std::cout;
    using std::endl;
    using std::cin;
    using std::map;
    using std::vector;
    using std::string;
    using std::sort;
    using std::priority_queue;
    using std::greater;
    using std::vector;
    using std::swap;
    using std::stack;
    using std::bitset;


    constexpr int N = 100000;
    
    int a[N];
    void solve()
    {
        int n;
        while (cin>>n&&n) 
        {
            long long sum = 0;
            int cur = 0;
            long long pre = 0;
            for (int i=0;i<n;i++) 
            {
                cin >> cur;
                if (pre < 0)
                    sum += (pre*-1);
                else
                    sum += pre;
                pre += cur;
            }
            cout << sum << endl;
        
        }
    }

};


int main()
{

#ifndef ONLINE_JUDGE
    freopen("d://1.text", "r", stdin);
#endif // !ONLINE_JUDGE
    cc::solve();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/shuiyonglewodezzzzz/p/10126132.html