题意:一个小镇上有n个居民,都以卖酒为生,城镇的运作模式就是每个居民买其他的酒。假定酒每天的需求量和销售量相同。但是运酒需要运费,运费等于每个居民的房子到其他居民的房子的距离*交易量(居民住在一条直线上)。求最小的交易量。
方法:参考了网上的代码,让邻居间进行交易,既让后一个满足前一个。例如即使前一个是买,后一个也是买也让后一个卖给前一个人。具体为什么也说不太清楚。。
AC代码:
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
const int maxn = 100000+10;
int arr[maxn];
int main()
{
#ifdef Local
freopen("a.in", "r", stdin);
#endif
int n = 0;
while (cin >> n && n)
{
int i = 0;
for (i = 0; i < n; i++)
cin >> arr[i];
long long int ans = 0;
for (i = 0; i < n-1; i++)
{
ans += abs(arr[i]);
arr[i+1] += arr[i];
}
cout << ans << endl;
}
return 0;
}