北京大學郭煒-最長上升子序列 動態規劃講解
北京大學郭煒-最長上升子序列 動態規劃講解
問題原型:
解題思路:
找子問題,題目要求我們求1~n的最長上升子序列的長度,那我們想一想:1-2個元素的最長上升子序列的長度是多少,第1個元素的最長上升子序列又是多少?
假設我們輸入一個序列:
9
2 7 1 5 6 4 3 8 9
顯然
第1個元素的最長上升子序列的長度為1
1-2個元素的最長上升子序列為(2 7),長度為2
1-3個元素的最長上升子序列為(2 7)(2 1),長度為2
1-4個元素的最長上升子序列有(2 7)(2 1)(2 5)(1 5),長度也為2
由此可見,我們是可以通過遍歷0~i-1個元素的最長上升子序列來得到i的最長上升子序列的。
我們建立一個和輸入序列一樣長的陣列maxLen,來記錄每一個元素從0~該元素位置的最長上升子序列的長度。maxLen中每一個元素的初值為1,因為倘若序列中元素i前面的數字都比i大,那麼元素i對應位置的最長上升子序列長度就是自己一單位的長度,即為1。
具體寫法我們程式碼裡面說:
#include "iostream"
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n,elem;
vector<int> a,maxLen;
cin>>n;
for (int i=0;i<n;i++){
cin>>elem;
a.push_back(elem);
// 設定每個元素預設最長上升子序列為1
maxLen.push_back(1);
//maxLen記錄的是第0個元素到第i個元素的最長上升子序列的長度
}
//第一層for迴圈遍歷輸入的每一個元素,找出該元素的最長上升子序列的長度
for (int i=1;i<n;i++){
//第二層for迴圈遍歷該元素前所有的元素
for (int j=0;j<i;j++){
//如果元素a[i]大於元素a[j],說明序列上升了
if (a[i]>a[j]){
maxLen[i] = max(maxLen[i],maxLen[j]+1);
}
}
}
sort(maxLen.begin(),maxLen.end(),greater<int>());
cout<<maxLen[0];
}
相關文章
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 動態規劃求解最長上升子序列問題動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 動態規劃(最長公共子序列LCS)動態規劃
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 最長公共子序列問題—動態規劃sdut動態規劃
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 最長上升子序列
- 動態規劃經典問題----最長公共子序列動態規劃
- 動態規劃求最長降序序列動態規劃
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 動態規劃之最長公共子序列求解動態規劃
- 【部分轉載】:【lower_bound、upperbound講解、二分查詢、最長上升子序列(LIS)、最長下降子序列模版】
- 死嗑 最長上升子序列(LIS)
- 線性dp:最長上升子序列
- [動態規劃] 六、最長迴文子串動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 最長上升子序列LIS 詳解+變形+擴充
- 最長上升子序列——O (nlogn)演算法原因解析!為什麼這樣可以求出來!(附帶動態規劃dp + 二分查詢講解)演算法動態規劃
- [LeetCode解題] -- 動態規劃二 [ 子串、子序列問題 ]LeetCode動態規劃
- 線性dp--最長上升子序列變形
- 雙序列動態規劃動態規劃
- 最長上升子串
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- [線性dp] 合唱隊形(最長上升子序列模型)模型
- 動態規劃---求硬幣最優解動態規劃
- 動態規劃之子序列問題動態規劃
- 最長公共子序列
- bzoj3173: [Tjoi2013]最長上升子序列(樹狀陣列)陣列
- 最長公共子序列(JAVA)Java
- 最長公共子序列你學會了嗎
- 西山居郭煒煒:立足原創IP 打造長線精品遊戲遊戲