动态规划和最长上升子序列
下降子序列的最小个数等于最长上升子序列的长度
if(height[j]<height[i]&&dp[j]+1>dp[i])
dp[i]=dp[j]+1;
dp[]是指到了第i个数时,以第i个数为结尾的上升子序列的长度
如果第j个数比第i个数小,则对于序列
x1, x2,,,,,,,,xj, xi...
来说,如果dp[j]+1比dp[i]大,则dp[i]=dp[j]+1;
#include <cstdio>
#define MAXN 10010
using namespace std;
int height[MAXN], dp[MAXN];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&height[i]);
dp[i]=1;
}
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(height[j]<height[i]&&dp[j]+1>dp[i])
dp[i]=dp[j]+1;
}
}
int max=0;
for(int i=0;i<n;i++)
{
if(dp[i]>max)
max=dp[i];
}
printf("%d\n",max);
}
return 0;
}