動態規劃 最大子串 HDOJ1003

2021-06-19 00:30:49 字數 775 閱讀 2515

題目大意:輸入是具有n個整數的向量x,輸出是輸入向量的任何聯絡子向量中的最大和,並輸出該子向量的開始和結束為止。例如:

輸入:5 6 -1 5 4 -7

7 0 6 -1 1 -6 7 -5

輸出:case 1:14 1 4

case 2:7 1 6

分別有四種方法都能夠求解出來分別是o(n^3)和o(n^2)以及o(n)但是只有分治演算法和掃瞄演算法能夠ac,

前兩種都會超時。

《程式設計珠璣》裡面在第八章講這個問題時有一句經典的話:任何正確的演算法都必須至少花費o(n)的時間,

所以最後的掃瞄演算法已經很高效了,不需要優化了。

掃瞄演算法**如下複雜度o(n):

//time:328ms mem:548k

#include using namespace std;

int main()

if(ssum<0)

}cout<<"case "<

平法演算法(o(n^2)執行時會超時:

#include using namespace std;

int main()

sum[0]=0;

sum[1] = a[1];

for(int j=2; j<=n;j++)

sum[j] = a[j]+sum[j-1];

int max = a[0];

int ssum;

int locl=0,locr=0;

for(int i=1;i<=n;i++)}}

cout<<"case "<

動態規劃 最大子陣列

解題思路 對於這樣乙個連續和的問題 個人習慣叫做最大連續和 如果我們要用動態規劃來解,首先得考慮狀態和狀態轉移方程。如果我們把題述陣列看成序列,那麼是不是可以用序列dp來考慮呢?我們不妨考慮乙個這樣的序列 1,3,5,2,4 a i 表示這個序列的第 i 個元素,dp i 表示最後乙個元素是a i ...

動態規劃 最大子串行

描述 1.從給定序列中找出連續最大子串行,滿足子串行的和為最大值,返回該最大值 2.從給定序列中找出連續最大子串行,滿足子串行的積為最大值,返回該最大值 思想 第一題首先申請乙個變數curmax表示當前子串行累計和,初始化為0,res表示當前所有子串行和的最大值,初始化為最小值int min。從序列...

最大子矩陣(動態規劃)

最大矩陣和顧名思義,就是乙個矩陣和最大,例如下面的矩陣 0 2 7 0 9 2 6 2 41 41 1 80 2 最終找到了和為15的矩陣 9 2 41 18所選的矩陣沒有規定,只要在這個大矩陣中,就可以了,那麼我們需要限定它的行和列 我們用三個for迴圈把所有的行的情況列舉,分別是i,j,k i從...