题大意为有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;
}