这个的话使用动态规划其实是最长上升子序列的解法,只需要去求最后的最大值即可,我是从后往前去计算的
#include<stdio.h> #include<algorithm> using namespace std; int n,maxn; int a[1005],dp[1005]; int main(){ while(scanf("%d",&n)!=EOF){ maxn=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); dp[i]=1; } for(int i=n-1;i>=1;i--){ for(int j=i+1;j<=n;j++){ if(a[i]<a[j]){ dp[i]=max(dp[i],dp[j]+1); } } if(dp[i]>maxn){ maxn=dp[i]; } } printf("%d\n",maxn); } return 0; }