题目很长,但是题却非常简单,最长递降子序列,是不是感觉无压力啊,那就快AC吧。
#include<cstdio>
#include<cstring>
#include<iostream>
#define N 1000000
#define max(a1,b1) (a1)>(b1)?(a1):(b1)
using namespace std;
int dp[N],arr[N],n;
int main(void)
{
int k = 1;
while(cin>>arr[1],arr[1]!=-1)
{
n = 1;
for(int i=2;;++i)
{
cin>>arr[++n];
if(arr[n]==-1)
{
n--;
break;
}
}
//cout<<n<<endl;
for(int i=1;i<=n;++i)
{
dp[i] = 1;
for(int j=1;j<i;++j)
if(arr[j]>arr[i]&&dp[j]>=dp[i])
{
dp[i] = dp[j]+1;
}
}
int ans = -1;
for(int i=1;i<=n;++i)
ans = max(ans,dp[i]);
printf("Test #%d:\n",k++);
printf(" maximum possible interceptions: %d\n\n",ans);
}
return 0;
}