當(dāng)前位置:
首頁 >
动态规划法求解最长递增子序列问题
發(fā)布時間:2023/12/31
29
豆豆
生活随笔
收集整理的這篇文章主要介紹了
动态规划法求解最长递增子序列问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題描述
給定一個無序的整數(shù)序列a[0…n-1],求其中最長遞增子序列的長度。
例如,a[]={2,1,5,3,6,4,8,9,7},n=9,其最長遞增子序列為{1,3,4,8,9},結(jié)果為5。
問題求解
設(shè)計動態(tài)規(guī)劃數(shù)組為一維數(shù)組dp,dp[i]表示a[0…i]中以a[i]結(jié)尾的最長遞增子序列的長度。對應(yīng)的狀態(tài)轉(zhuǎn)移方程如下:
求出dp后,其中最大元素即為所求。
代碼
int a[] = { 2,1,5,3,6,4,8,9,7 }; int n = sizeof(a) / sizeof(a[0]); int ans = 0; int dp[MAXN];void solve(int a[], int n) {int i, j;for (i = 0; i < n; i++){dp[i] = 1;for (j = 0; j < i; j++){if (a[i] > a[j])dp[i] = max(dp[i], dp[j] + 1);}}ans = dp[0];for (i = 1; i < n; i++)ans = max(ans, dp[i]); }算法分析
solve()算法中含兩重循環(huán),時間復(fù)雜度為O(n2)。
總結(jié)
以上是生活随笔為你收集整理的动态规划法求解最长递增子序列问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 串行通信原理及实验仿真
- 下一篇: 模仿电影院座位预定效果