题意:这道题目就是求最长的上升序列。 思路:dp,貌似是比较简单的dp。注意结果不一定是dp[n-1]. 代码: #include <iostream> using namespace std; int a[10000]; int dp[10000]; int main() { int x; int cishu = 1; while(scanf("%d",&x), x!= -1) { int n = 0 ; a[n] = x; n = 1; dp[0] = 0; while(scanf("%d",&x),x != -1) { a[n++] = x; dp[n-1] = 0; } int i,j; int max; for(i = 0 ; i < n ; i++)//以谁为起始点的最长序列 { max = 0; for(j = 0 ; j < i ; j++) { if(a[i] <= a[j] && dp[j] > max) max = dp[j]; } dp[i] = max + 1; } max = dp[0]; for(i = 1 ; i < n ; i++) if(max < dp[i]) max = dp[i]; printf("Test #%d:/n maximum possible interceptions: %d/n/n",cishu++,max); } return 0; }