贪心
记录每套系统拦截过的最小高度
新来的导弹
如果高于所有导弹的最低高度
那就只能再加一套了嘛
如果低于某些系统的最低高度
那就贪心
把它加到
最低高度最低的一套系统内
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<map>
#include<ctime>
#define MAX 1000000007
#define LL long long
using namespace std;
int n,i,j,a[105],up[105],h[105],tot,ans1,ans2;
int main()
{
n=1;
while(scanf("%d",&a[n])!=EOF)
{
up[n]=1;
n++;
}
n--;
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
{
if(a[i]<=a[j]) up[i]=max(up[i],up[j]+1);
ans1=max(ans1,up[i]);
}
h[1]=a[1];
tot=1;
for(i=2;i<=n;i++)
{
int p=0;
for(j=1;j<=tot;j++)
{
if(h[j]>=a[i])
{
if(p==0) p=j;
else if(h[j]<h[p]) p=j;
}
}
if(p==0)
{
tot++;
h[tot]=a[i];
}
else h[p]=a[i];
}
ans2=tot;
printf("%d\n%d",ans1,ans2);
return 0;
}