题目链接:Click here
思路:保存下每一个拦截系统目前可以拦截的最大高度,每输入一个高度,就与之比较,如果某个最大拦截高度大于输入的高度,将之替换;如果找不到,就新建一个拦截系统。
这个代码感觉不是特别严谨,想了半天就是想不出哪个数据可以卡住,但是感觉肯定有,求大神指点。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cstdlib>
using namespace std;
int main()
{
int n, a, ans, j;
int dp[30005];
while(scanf("%d", &n) != EOF)
{
ans = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &a);
for(j = 0; j <= ans; j++)
{//循环比较,找出可以拦截的系统并替换其最大拦截高度
if(a <= dp[j])
{
dp[j] = a;
break;
}
}
if(j > ans)
{//如果找不到的话,就新建一个拦截系统,最大高度就为刚输入的高度
ans++;
dp[ans] = a;
}
}
printf("%d\n", ans);
}
return 0;
}