刷題 最長上公升子串行 最大上公升子串行和

2021-09-29 11:34:00 字數 1968 閱讀 8509

關於子串行的問題做個記錄

一、最長上公升子串行

題目描述剝離,不管時搬箱子還是其他,一般來說,只要符合求後面的值比前面的大的序列長度基本上能套用

lis解法(1)動態規劃

找到序列1 7 3 5 9 4 8最長上公升子串行

找到初始化條件&狀態轉移方程

初始化:對於序列中的每個元素來說,它本身的長度都是1,這是個重要的初始化條件

狀態轉移方程:對於i和j來說,假設索引i>j,序列為a的話。那麼無非有兩種情況,如果a[i] > a[j],那麼序列的長度dp[j]+1 和dp[i]的值誰大的問題。即 maxlen = max(dp[i],dp[j]+1) ( a[i] > a[j]),注意此時只有a[i] 大於a[j]時才成立,也就是說當索引為i時,比較前 j個元素上公升子串行+1 和 以i結尾時最長上公升子串行誰大的問題

**如下:

int boxmaxnum(vector&numinfo)

//狀態轉移方程實現

for (int i = 0; i < allboxnum; i++)

}maxnum = max(maxnum, dp[i]);

}for (int k = 0; k < allboxnum; k++)

cout << endl;

cout << "max num is:" << maxnum << endl;

delete dp;

return maxnum;

}main函式:

int boxnum;

cin >> boxnum;

if (boxnum <= 0)

vectorboxinfo;

int numinfo;

for (int i = 0; i < boxnum; i++)

int maxnum = boxmaxnum(boxinfo);

cout << maxnum << endl;

輸出子串行和最大的上公升子串行長度

二、最大上公升子串行的和

求最大上公升子串行的和的問題  和  求最大上公升子串行的長度 理論上時一致的  上面用dp來表示最大的長度,同樣,也可以用dp來表示上公升子串行的和,問題可以向下面轉化

初始狀態: sum[i] = a[i],即每個值的位置的和為 其本身的值,初始值非常重要

狀態轉移方程:當遍歷到 i 位置時,需要不斷比較  sum[i] 和 sum[j]+a[i]的大小,與上一題的思路完全一致,唯一變化的是初始值變成每個值自身。乙個求的是最長的長度,乙個是求累加的和,都用乙個額外的資料結構來儲存  中間的長度或者和 ,最後做下比較 。相當於說 定義的資料結構sumvalue中儲存的是  從前到後的之前計算的值

1 7 3 5 9 4 8---當遍歷到5的時候,需要從1開始比較

j = 0:比較值sum[i] 和 sum[ j ] + numinfo[i]   -------max(5,6)------->6

j = 1:不用比較

j = 2: 比較 sum[ i ] 和sum[ j ] + numinfo[ i ]--------------max(6,   4  (sum[2]) + 5 (numinfo[3]))-----9

依次類推

轉移方程:   max (  sum[ i ],   sum[ j ] + numinfo[ i ] )

當前的和的值     前乙個和的值+當前值     

**:int sumvalue[1001];

int getmaxupsum(vector&numinfo)

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

for (int n = 0; n < len; n++)

return maxsumvalue;

}附上另外乙個好的解釋:

Dp 最長上公升子串 最長上公升子串行

乙個數的子串bi,當b1 b2 bs的時候,我們稱這個子串是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串 ai1,ai2,aik 這裡1 i1 i2 ik n。如 對於序列 1,7,3,5,9,4,8 有它的一些上公升子串,如 1,7 3,5,9 等等。這些子串中最長...

刷題之路 最長上公升子串行

這是乙個經典的lis 即最長上公升子串行 問題,請設計乙個盡量優的解法求出序列的最長上公升子串行的長度。給定乙個序列a及它的長度n 長度小於等於500 請返回lis的長度。例如1,2,3,2,4,5,3,6,7,5,8,lis就為12345678,長度為8 經典動態規劃問題,確定初始狀態,當以第乙個...

最長上公升子串行

問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...