这题的意思是,有n家人,每家都买或者卖红酒,相邻的两家买卖1瓶红酒要花1单位的运费。
问总共的最小运费是多少
这题要是模拟的话,没有特殊的方法肯定超时。
看了别人的博客,有种想法是每次都把相邻的两家进行买卖,买卖之后的红酒数量是两者之和。
sum加上的是前一个的红酒数量
(真是鬼才想得到的,不过很有意思)
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
long long n,i,a[100005],sum;
while(scanf("%lld",&n)==1)
{
if(n==0)break;
sum=0;
for(i=0;i<n;i++)
scanf("%lld",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]>0)sum+=a[i];
else sum+=(a[i]*(-1));//sum加上a[i]的绝对值
a[i+1]+=a[i];//后一个买卖之后,剩下的红酒数量
}
printf("%lld\n",sum);
}
return 0;
}