演算法提高 (一)
阿新 • • 發佈:2021-10-18
一、最大連續子段和 /和最大子序列
資源限制 時間限制:1.0s 記憶體限制:256.0MB 問題描述 給出一個長為n的數列,a1,a2,……,an,求和最大的連續子序列,即找到一對(i,j),i<=j,使ai+ai+1+……+aj的和最大,輸出這個和 輸入格式 第一行為正整數n第二行n個用空格分開的整數
表示a1,a2,……,an 輸出格式 一個整數,表示最大連續子序列的和 樣例輸入 3
-1 -2 -3 樣例輸出 -1 資料規模和約定 1<=n<=10^5,-10^5<=ai<=10^5 C++實現(動態規劃)
#include<iostream> #include<cmath> #include<string> #include<vector> #include<math.h> #include<set> #include<map> #include<algorithm> using namespace std; int Maximum_subsegment_sum(int n,int *a) { int i, sum=-999999,temp=-9999999; for (i = 0; i < n; i++) { if (temp > 0) { temp += a[i]; } else { temp = a[i]; } if (temp > sum) { sum = temp; } } return sum; } int main() { int i, * a, n; cin >> n; a = new int[n]; for (i = 0; i < n; i++) { cin>> a[i]; } cout << Maximum_subsegment_sum(n, a) << endl;
delete [] a; return 0; }
待補……
不忘初心,方得始終。