思路:裸的最大下降子序列
#include<iostream> #define max(a,b) (a>b?a:b) using namespace std; const int N=10010; const int inf=32770; int num[N],dp[N]; int n; int solve() { int ans=0; memset(dp,0,sizeof(dp)); num[0]=inf; for(int i=1;i<=n;i++) { for(int j=i-1;j>=0;j--) { if(num[i]<=num[j]) { dp[i]=max(dp[i],dp[j]+1); } } ans=max(ans,dp[i]); } return ans; } int main() { int cases=1; int data; label: n=0; while(scanf("%d",&data),data!=-1) { num[++n]=data; } if(n!=0) { printf("Test #%d:\n maximum possible interceptions: %d\n\n",cases++,solve()); goto label; } return 0; }