题意:一个小镇上有n个居民,都以卖酒为生,城镇的运作模式就是每个居民买其他的酒。假定酒每天的需求量和销售量相同。但是运酒需要运费,运费等于每个居民的房子到其他居民的房子的距离*交易量(居民住在一条直线上)。求最小的交易量。
方法:参考了网上的代码,让邻居间进行交易,既让后一个满足前一个。例如即使前一个是买,后一个也是买也让后一个卖给前一个人。具体为什么也说不太清楚。。
AC代码:
#include#include #include #include #include #include #include #include #include #include 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; }