题目概述:
在一个数字序列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(非递减)的。
样例输入:
8
1 2 3 -9 3 9 0 11
样例输出:
6
思路:
(过几天再写吧。。。)
参考代码:
#include<bits/stdc++.h>
#define maxn 1000
using namespace std;
int dp[maxn];
int main()
{
int n;
scanf("%d",&n);
int a[maxn],ans=0;
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
for(int i=0; i<n; i++)
{
dp[i]=1;//边界初始条件(即假设序列的每个元素自成一个子序列) (结果总是确定的,动态规划总是从这些边界出发)
for(int j=0; j<i; j++)
{
if(a[i]>=a[j]&&dp[i]<dp[j]+1)
dp[i]=dp[j]+1;//状态转移式
}
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}