经典DP~ 原题地址 C语言代码 #include<stdio.h> int main() { int n,num[1001],i,j,best[1001];//best[i]代表以序列中第i个数为最后一个数时,最长上升子序列的长度 scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&num[i]); best[i]=1;//初始化 } for(i=1;i<n;i++) for(j=0;j<i;j++){ if(num[j]<num[i]&&best[j]+1>best[i])//状态转移方程 best[i]=best[j]+1; } j=0; for(i=0;i<n;i++) if(best[i]>j) j=best[i];//所有best[]值里最大的那个就是最优值 printf("%d/n",j); }