- 令b[j]表示以位置 j 爲終點的所有子區間中和最大的一個
- 子問題:如j爲終點的最大子區間包含了位置j-1,則以j-1爲終點的最大子區間必然包括在其中
- 如果b[j-1] >0, 那麼顯然b[j] = b[j-1] + a[j],用之前最大的一個加上a[j]即可,因爲a[j]必須包含
- 如果b[j-1]<=0,那麼b[j] = a[j] ,因爲既然最大,前面的負數必然不能使你更大
int max = 0;
int b[n+1];
int start = 0;
int end = 0;
memset(b,0,n+1);
for(int i = 1; i <= n; ++i)
{
if(b[i-1]>0)
{
b[i] = b[i-1]+a[i];
}else{
b[i] = a[i];
}
if(b[i]>max)
max = b[i];
}
練習:POJ1050