问题A 最长不下降子序列(LIS)
题目大意
给定一个序列,求其不下降子序列的最大长度。(子序列不要求连续)
思路
动态规划
dp[i]=max{dp[j]+1,dp[i]}
dp[i]初始化全为1
代码
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, const char * argv[]) {
int N;
int num[1001],dp[1001];
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&num[i]);
dp[i]=1;
for(int j=0;j<i;j++){
if(num[j]<=num[i]&&dp[j]+1>dp[i])
dp[i]=dp[j]+1;
}
}
int ans=-1;
for(int i=0;i<N;i++){
if(dp[i]>ans)
ans=dp[i];
}
printf("%d\n",ans);
return 0;
}