POJ-2940-Wine trading in Gergovia

来源:互联网 发布:新速特软件手机应用 编辑:程序博客网 时间:2024/05/16 15:14

题大意为有n个等距的村庄,每个村庄要么买酒要么卖酒,把k个单位的酒从一个村庄运送到相邻的村庄需要k个单位劳动力,问最少需要多少劳动力才能满足所有村庄的需求。

由于最前面和最后面不相连,所以就比较简单了~

代码:

#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>using namespace std;const int maxn=10e4+10;int a[maxn],b[maxn];int main(){    int n;    while(scanf("%d",&n)&&n)    {int cou=0;for(int i=0;i<n;i++){    scanf("%d",&a[i]);    if(a[i]>0)b[cou++]=i;}cou=0;long long ans=0;for(int i=0;i<n;i++){    if(a[i]<0)    {while(a[i]<0){    int mini=min(-a[i],a[b[cou]]);    a[i]+=mini;    a[b[cou]]-=mini;    ans+=mini*(abs(b[cou]-i));    if(!a[b[cou]])cou++;}    }}printf("%I64d\n",ans);    }    return 0;}