參考:
最長上公升子串行:
定義:
給出n個無序的數列或字串, a1 , a2 ,a3 ,a4 ..... an . 按從左到右的順序選出盡量多的整數,組成乙個上公升子串行(嚴格增和非嚴格增)。例如序列1,6,2,3,7,5,可以選出的最長的上公升子串行是1,2,3,5. 長度是 4 .
分析:
對於線性結構上的dp,我們常常設以某個點結尾能達到的最大/小值;
那麼我們可以設dp[i]為以i結尾的最長上公升子串行的長度,當到i+1的時候,如果這一位的數字比前面的某乙個數字大,那麼以那個 數字結尾的dp值就可以加1;我們可以用兩個for迴圈來實現統計i從1到我們所要求的n,這樣的時間複雜度是o(n^2);
模板:
#include #include #include #define swap(a,b) a ^= b ^= a ^= b
#define pi acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
using namespace std ;
const int inf = 0x3f3f3f3f;
const int max = 1e5+10;
int a[max] ;
int dp[max] ;
int ans = -0x3f ;
int main()
for(int i = 1; i<=n ;i++)
low[1] = a[1] ; // 約定一開始low陣列就乙個字元a[1]
int len = 1 ;
for(int i = 2 ; i<=n ; i++)
else
} ans = len ;
cout
}
最長上公升子串行
問題描述 乙個數的序列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 等等...
最長上公升子串行
最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...
最長上公升子串行
最長上公升子串行問題 給出乙個由n個數組成的序列x 1.n 找出它的最長單調上公升子串行。即求最大的m和a1,a2 am,使得a1動態規劃求解思路分析 o n 2 經典的o n 2 的動態規劃演算法,設a i 表示序列中的第i個數,f i 表示從1到i這一段中以i結尾的最長上公升子串行的長度,初始時...