给定一个长度为n(n<=1e6)的序列A,A中元素可正可负可为0,让你构造一个长度为n的序列w,w满足条件:
1.w中每个元素都是正数
2.w[1]=1
3.w[i]∈[2,w[i-1]+1](i>1)
4.使得∑A[i]*w[i]最大
2.w[1]=1
3.w[i]∈[2,w[i-1]+1](i>1)
4.使得∑A[i]*w[i]最大
分析:
从A的序列尾部向前扫描,直到扫到sum为负数,再从头开始,直到循环结束。
代码(部分):
for(i=n;i>=1;--i)
{
if(sum+a[i]>=0&&i>1)
{
s+=sum+2*a[i]; //******
sum+=a[i];
}
else
{
s+=sum+2*a[i];
sum+=a[i];
if(i==1) s-=sum; //只有w[1]=1
ans+=s;
s=sum=0;
}
}
1490

被折叠的 条评论
为什么被折叠?



