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
-211
-413
-5-2
output示例
20
time limit exceeded:
#include
using namespace std;
int main()
for(i=1;i<=n;i++)//i為起點,j為終點
}cout聯機演算法:聯機演算法是在任意時刻演算法對要操作的資料唯讀入(掃瞄)一次,一旦被讀入並處理,它就不需要在被記憶了。
而在此處理過程中演算法能對它已經讀入的資料立即給出相應子串行問題的正確答案。
#include
using namespace std;
int main()
}return maxsum;
}第二種 在第一種上的改進版 時間複雜度o(n^2)
int maxsum(int a,int n)
}return maxsum;
}
第三種 分而治之 遞迴思想
將陣列一分為二,左邊右邊,整個陣列最大的和可能是左半邊最大和 也可能是右半邊最大和 還有可能是跨越邊界最大和 , 分別求出來 ,在比較大小。時間複雜度o(nlogn)
int max(int a,int left,int right)
sum = 0;
right_max = 0;
for(i= center+1;i<=right;i++)
ret = left_max+right_max;
if(retint max(int a,int n)
return maxsum;
}
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...