最少拦截系统
原题链接https://vjudge.net/contest/349774#problem/J
使用数组sum记录此数是第几个导弹系统,
当sum[i]=1;时跟第sum[1]的数比较,当比第一个系统中的某个数大时会进入第二个系统,同理继续比较第二个最后遍历找出,位于最多系统的那个数
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<fstream>
using namespace std;
long long sum[10005];
long long a[10005];
int main()
{
long long n;
while(~scanf("%lld",&n))
{
memset(sum,0,sizeof(sum));
memset(a,0,sizeof(a));
long long i,j;
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
sum[i]=1;//初始认为第一系统可以全部拦截,都为第一系统
}
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
if(a[i]>a[j]&&sum[j]+1>sum[i])//判断大小,同时判断处于第几系统。
{
sum[i]=sum[j]+1;
}
}
}
long long maxx=-10086;
for(i=0;i<n;i++)//找出最大的系统
{
maxx=max(maxx,sum[i]);
}
printf("%lld\n",maxx);
}
return 0;
}