动态规划/LIS 求最长上升子序列

DP线性规划:

#include <iostream>

#include <algorithm>

using namespace std;

int a[1000+1];

int dp[1000+1];

int main()

{

int n;

cin>>n;

int ans=0;

for(int i=0;i<n;i++)

{

cin>>a[i];

dp[i]=1;

}

for(int i=1;i<n;i++)

{

for(int j=0;j<i;j++)

{

if(a[i]>=a[j])

{

dp[i]=max(dp[j]+1,dp[i]);

}

ans=max(ans,dp[i]);

}

}

cout<<ans;

return 0;

}

一个序列中,最长上升子序列的长度就是不下降子序列的个数。

点赞