最长上升子序列(dp)

求一个长度为n的最长上升子序列的长度(LIS),即对于任意的i


思路:通过dp求解,我们首先定义:dp[i]=以a[i]为末尾的最长上升子序列的长度;

则以a[i]结尾的上升子序列是:

1)只包含a[i]的子序列

2)在满足j

这二者之一,即状态转移方程是:dp[i]=max{dp[i],dp[j]+1|j


时间复杂度:O(n^2)


代码:

//输入
int n;
int a[max_n];

int dp[max_n];//dp数组

void solve(){
      int res=0;
      for(int i=0;i


你可能感兴趣的:(DP)