思路:求最大上升子序列:由于是每套拦截系统以后每一发炮弹都不能超过前一发的高度,所以对于后面一发比前面高的炮弹,必须需要新的拦截系统来处理(击下前面较低炮弹的系统已经无法拦截)。所以需要的拦截系统数量至少是最大上升子序列的长度。
#include <iostream>
using namespace std;
const int maxn=10000+10;
int a[maxn],dp[maxn];
int main()
{
int n;
while(cin>>n)
{
int x;
for(int i=0;i<n;i++)
{
cin>>a[i];
dp[i]=0;
for(int j=0;j<i;j++)
if(a[i]>a[j]&&dp[j]>dp[i]) dp[i]=dp[j];
dp[i]++;
}
int ans=0;
for(int i=0;i<n;i++)
if(ans<dp[i]) ans=dp[i];
cout<<ans<<endl;
}
return 0;
}