51nod 1049 最大子段和 簡單DP

2021-07-31 02:25:12 字數 1111 閱讀 2864

1049 最大子段和

基準時間限制:1 秒 空間限制:131072 kb 分值: 0 難度:基礎題 收藏 取消關注

n個整數組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的連續子段和的最大值。當所給的整數均為負數時和為0。

例如:-2,11,-4,13,-5,-2,和最大的子段為:11,-4,13。和為20。

input

第1行:整數序列的長度n(2 <= n <= 50000)

第2 - n + 1行:n個整數(-10^9 <= a[i] <= 10^9)

output

輸出最大子段和。

input示例

6 -2

11 -4

13 -5

-2 output示例

20思路:簡單的動態規劃

可以用狀態轉移方程:dp[i]=max(a[i],dp[i-1]+a[i])

也可以:記錄欄位和sum,線性掃陣列,如果sum>0(即sum能使i位置的最大值增大),sum+=a[i]

否則sum=a[i]

maxn=max(maxn,sum)

而最大值maxn 就是 sum的峰值

**:

#include

#include

#include

using

namespace

std;

long

long a[50005];

long

long dp[50005];

long

long maxsum(int n)

else

maxn=max(maxn,sum);

}return maxn;

}int main()

if(cns==n)

printf("%i64d\n",maxsum(n));

return0;}

// dp[0]=0;

// for(int i=1;i<=n;i++)

// long long max=0;

// for(int i=1;i<=n;i++)

51Nod 1049 最大子段和

n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。input 第1行 整數序列的長度n 2 n 50000 第2 n 1行 n個整數 ...

51nod 1049 最大子段和

1049 最大子段和 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,1...

51Nod 1049 最大子段和

1049 最大子段和 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,1...