- 难点
状态:以A[i]结尾的最长不下降子序列
状态转移方程:dp[i] = max(1,dp[j]+1) - 代码实现
#include<stdio.h>
const int maxn = 1000;
int A[maxn],dp[maxn];
int main()
{
int i,j;
int n;
scanf("%d",&n);
for(i = 1;i<=n;i++)
{
scanf("%d",&A[i]);
}
for(i=1;i<=n;i++)
{
dp[i] = 1;//初始化j
for(j = 1;j<i;j++)
{
if(A[i]>=A[j] && dp[j] + 1> dp[i])
{
dp[i] = dp[j] + 1;
}
}
}
//数组中求最大值
int k = 1;
for(i = 2;i<=n;i++)
{
if(dp[i]>dp[k])
k = i;
}
printf("%d\n",dp[k]);
return 0;
}
/*
IN:
8
1 2 3 -9 3 9 0 11
OUT:
6
*/