题目大意:
正数代表的是需要的酒的数量,负数代表的是要卖出的酒的数量,酒店之间都是线性排列的,相邻两个酒店之间的距离都是1。求花最少的费用去交易买卖来满足所有酒店的需求。
思路:
要使得路费最少的话,利用贪心的思想,就让相邻的两个酒店之间进行交易,不管他们是否可以满足各自的要求,只需要先让前一个满足就可以了。这样路费就只是酒*1,本来想说的是正数去寻找最近的负数的,可是这题的数据量有点大,所以可能会超时,然后看到大神的代码恍然大悟。
代码:
#include <iostream>
using namespace std;
#include <cmath>
#include <cstring>
#include <stdio.h>
int h[100000];
int main() {
int n;
while(scanf("%d",&n) != EOF && n) {
for(int i = 0 ; i < n; i++) {
scanf("%d",&h[i]);
}
long long ans = 0;
for(int i = 0; i < n-1; i++) {
ans += abs(h[i]);
h[i + 1] = h[i + 1] + h[i];
}
printf("%lld\n",ans);
}
return 0;
}