#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int n, a[maxn];
int f[maxn], g[maxn];
int main()
{
// 输入导弹依次飞来的高度
while(cin >> a[n]) n ++;
int ans1 = 0;
int ans2 = 0;
for(int i = 0; i < n; i ++)
{
f[i] = 1;
g[i] = 1;
for(int j = 0; j < i; j ++)
{
// 如果当前导弹高度小于等于前一个导弹高度,更新f数组
if(a[i] <= a[j]) f[i] = max(f[i], f[j] + 1);
// 如果当前导弹高度大于前一个导弹高度,更新g数组
else g[i] = max(g[i], g[j] + 1);
}
// 更新最大拦截导弹数
ans1 = max(ans1, f[i]);
ans2 = max(ans2, g[i]);
}
// 输出最多能拦截的导弹数和要拦截所有导弹最少要配备的系统数
cout << ans1 << endl;
cout << ans2 << endl;
return 0;
}
1010. 拦截导弹 线性DP 最长上升子序列
最新推荐文章于 2024-11-05 21:58:11 发布