8-7



睡觉









最大子序列问题

这个问题的关键是

sum+=a[i];

ans=max(sum,ans);

if(sum<0)

sum=0;

//找到一个子序列,循环找下一个。


/*
最大子序列的和
2 -5 3 4 -2 2 -1 5
Max = sum(1~n) - Min
*/
int main()
{
//O(n)
int sum = num[1] + num[2] + ... + num[n];
int sum1 = 0;
int sum2 = 0;
int Max = 0;
int Min = 0;
for (int i = 1 ; i <= n ; i++)
{
sum1 += num[i];
sum2 += num[i];
Max = max(Max,sum1);
Min = min(Min,sum2);
if (sum1 < 0)
sum1 = 0;
if (sum2 > 0)
sum2 = 0;
}

printf ("%d\n",max(Max,sum-Min));
return 0;
}

点击打开链接


posted @ 2017-08-07 10:58  Veritas_des_Liberty  阅读(220)  评论(0编辑  收藏  举报