题解:一套系统可以拦截下一个最长的递减子序列,每多一个递增序列,就需要多一套系统,直接求递增子序列的长度即可。
AC代码:
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; int dp[1005]; int a[1005]; int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++)dp[i]=1; for(int i=0;i<n;i++) { scanf("%d",&a[i]); for(int j=0;j<i;j++) { if(a[i]>a[j]&&(dp[i]<dp[j]+1)) dp[i]=dp[j]+1; } } int ma=-1; for(int i=0;i<n;i++) { if(dp[i]>ma)ma=dp[i]; } printf("%d\n",ma); } return 0; }