AcWing 1010. 拦截导弹
原题链接
简单
作者:
陈锶瑶and伍萍
,
2023-11-20 21:30:54
,
所有人可见
,
阅读 17
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std ;
const int N = 1010 , INF = 0x3f3f3f3f ;
int h[N] ;
int num , cnt ;
int f[N] , g[N] , q[N];
int main ()
{
for (int i = 1 ; i < N ; i++ ){
scanf ("%d" , &h[i]) ;
if (h[i]) num ++ ;
else break ;
}
for (int i = num ; i >= 1 ; i--) {
g[i] = 1 ;
for (int j = i + 1 ; j <= num ; j++)
if (h[i] >= h[j]) g[i] = max (g[i] , g[j] + 1) ;
}
int res = 0 ;
for (int i = 1 ; i <= num ; i++) {
res = max (res , g[i] ) ;
}
// 贪心求出所需要的最少导弹系统
for (int i = 1 ; i <= num ; i ++ ){
int k = 0;
while (k < cnt && q[k] < h[i]) k ++ ;
if (k == cnt) q[cnt ++ ] = h[i];
else q[k] = h[i];
}
printf ("%d\n%d" , res , cnt) ;
return 0 ;
}