题意:一条街有许多卖酒的店,有些店需要进酒,有些店需要出酒,所有的店的需求总和为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; }