11 2 最大連續子串行和 動態規劃

2021-09-29 12:19:49 字數 638 閱讀 3818

如何求最大連續子串行和?

1、如果只有乙個數,則便是其本身。

2、有多個數的陣列a,如-2,11,-3,13;則最大子串行和為 11-3+13=20.我們知道此序列第二個序列前的最大值為11,前三個的最大和為11-3=8,若利用dp陣列儲存第i個位置的最大子串行和,則dp[3]=dp[2]+a[3];

由此可得狀態轉移方程:dp[i]=max(a[i],dp[i-1]+a[i]);

#include #include using namespace std;

const int maxn=10010;

bool cmp(int a,int b)

int a[maxn],dp[maxn]; //a[i]存放序列,dp[i]存放以a[i]結尾的連續序列的最大序列和

int main()

dp[0]=a[0];//邊界

for(int i=1;isort(dp,dp+n,cmp);//從大到小排序

printf("%d\n",dp[0]);

return 0;

}

測試用例:

輸入:6

-2 11 -4 13 -5 -2

輸出:20

動態規劃 最大連續子串行和

題目大意就是讓你選出一段和最大的連續序列,當有幾個序列和並列時,選出下標最小的的連續序列。可以採用動態規劃的思想解決,設一連續序列為a 0 a 1 a n 分別以a 0 a 1 a n 結尾的最大序列和為d 0 d 1 d n 若d i 1 0,則d i d i 1 a i 若d i 1 0,則d ...

動態規劃 最大連續子串行和

動態規劃 最大連續子串行和 問題描述 給定乙個數字序列a1,a2,an,求i,j 1 i j n 使得ai aj最大,輸出這個最大和。樣例 211 413 5 2顯然 11 4 13 20 為和最大的選取情況,因此最大和為20 下面介紹動態規劃的做法,複雜度為o n 讀者會發現其實左端點的列舉是沒有...

動態規劃 最大連續子串行和

給定乙個數字序列,a1,a2,an,求i,j 1 i j n 使得ai aj最大,輸出這個最大和。樣例輸入 2 11 4 13 5 2 輸出 20 即11 4 13 20 最大 分析 如果暴力做的話,乙個列舉,需要o n 2 在計算需要o n 一共需要o n 3 因為重複計算的太多了,還是設定乙個d...