1、問題描述:給定乙個序列arr,假設全是整數,給出最長的乙個遞增子串行,比如輸入arr=[2,1,5,3,6,4,8,9,7],輸出[1,3,4,8,9]。
4、下面是**:
#include#includeusing namespace std;
int main()
//首先計算出以第i個位置結尾的最長遞增子串行的大小
dp[0] = 1;//第乙個位置的長度是1
for (i = 1; i < n; ++i)
} //接下來根據最長遞增子串行的大小找出最長遞增子串行,方法是從最大的dp[i]入手進行逆序
int pos=0;//記錄當前最大的dp[i]的位置
vectormax;//記錄每次迴圈中最大的arr[i]
//找出最大的子串行數目的位置
for (i = 0; i < n; ++i)
} max.push_back(arr[pos]);//把arr[pos]放進去 !!!
cout << "the max length is: " << dp[pos] << endl;
for (j = 0; j < pos; ++j)
} cout << "the sequence is: " << endl;
for (i = max.size() - 1; i >= 0; --i)
cout << endl;
}
動態規劃之最長遞增子串行
基本歸納法 對於ai 1,只要考察其前乙個狀態ai即可完成整個推理過程,它的特點是只要ai確定,則計算ai 1便不需要考察前序狀態a0.ai 1,我們將這一模型稱之為馬爾科夫模型 高階歸納法 相應的,對於ai 1,考察前i個狀態集才可完成整個推理過程,往往稱之為高階馬爾科夫模型 在計算機演算法中,高...
動態規劃之最長遞增子串行
面試經常出現問題 最長遞增子串行問題是乙個很基本 較常見的小問題,但這個問題的求解方法卻並不那麼顯而易見,需要較深入的思考和較好的演算法素養才能得出良好的演算法。由於這個問題能運用學過的基本的演算法分析和設計的方法與思想,能夠鍛鍊設計較複雜演算法的思維,我對這個問題進行了較深入的分析思考,得出了幾種...
動態規劃之最長遞增子串行LIS
子串行 乙個序列 s 任意刪除若干項,剩餘的序列叫做s的乙個子串行。也可以認為是從序列s按原順序保留任意若干項得到的序列。現在我們要求解乙個陣列裡最長遞增子串行的長度。在此我提出兩種方法,並且附上 解決方法 1 利用動態規劃求解兩個陣列的最長哦公共子串行來求解這種題目,但只適用於求解最長遞增子串行的...