1. 程式人生 > 其它 >2020-12-14演算法_動態規劃之最大子段和

2020-12-14演算法_動態規劃之最大子段和

技術標籤:演算法分析

最大子段和


給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。
要求演算法的時間複雜度為O(n)。

輸入格式:
輸入有兩行:
第一行是n值(1<=n<=10000);
第二行是n個整數。

輸出格式:
輸出最大子段和。

輸入樣例:
在這裡給出一組輸入。例如:
6
-2 11 -4 13 -5 -2

輸出樣例:
在這裡給出相應的輸出。例如:
20

原始碼:

#include <iostream>
using namespace
std; int main() { int n,sum,i,j,k,z; int flag=0; int *a; cin>>n; a=(int *)malloc(sizeof(int)*n); for(i=0;i<n;i++) { cin>>a[i]; if(a[i]>=0) flag=1; } if(flag==0) cout<<0<<endl; else { k=0; for(i=1;i<=n;i++) { for(z=0;z<n-i;z++) { sum=0;
for(j=z;j<(z+i);j++) sum=sum+a[j]; if(sum>k) k=sum; } } cout<<k<<endl; } return 0; }

執行截圖:
1