最大子段和 (dp

2021-08-22 10:17:13 字數 1242 閱讀 3463

n個整數組成的序列a1,a2,a3,…,ann, 求該序列如ai+ai+1+…+aj的連續子段和的最大值。當所給的整數均為負數時和為0。

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

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

第2 - n + 1行:n個整數(-10^9 <= ai<= 10^9)

輸出最大子段和。

6

-211

-413

-5-2

20
本題思路: dp求解(讀者:?? 這博主是zz嗎? 我也知道是用dp求, 你這不是廢話嗎。。     博主: 沒錯,這就是廢話   。。。。。。。。(@ ^   .....  ^@))

這題看上去我並沒有用dp 公式,其實它的本質還是dp公式   dp[ i ] = max ( dp [ i - 1 ] + a [ i ] , a [ i ] ) 的變形,如果dp[ i - 1 ] > 0 ,我就看 dp [ i - 1 ] + a [ i ] 和 a[ i ] 誰更大,然後求一下dp[ i ]的最大值就好了,,就這樣一直求max即可

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

ll a[50000+10], dp[50000+10];

int main()

if(flag == 1)

}else ans = 0;

printf("%lld\n", ans);

return 0;

}

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

ll a[50000+10], dp[50000+10];

int main()

if(flag == 1)}}

else ans = 0;

printf("%lld\n", ans);

return 0;

}

dp 最大子段和

注意 在實際問題中可能題目要求至少選乙個,可能可以乙個都不選 只返回最大子段和 include include using namespace std const int maxn 2e5 10 const int inf 0x7fffffff int n int a maxn int maxsum...

最大子段和(dp)

最基礎的的最大子段和,設dp i dp i dp i 為以num i num i num i 結尾的最大子段和,有dp i m ax d p i 1 n um i nu m i dp i max dp i 1 num i num i dp i max dp i 1 num i n um i 最終結果...

最大子段和 經典dp

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