題意:一個小鎮上有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; }