题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257
就是求有个几个最长非递增的序列,数组中存的就是每个序列的最小值,如果来了一发炮弹,去前面找有没有比这个炮弹高的最小值,如果有,则替代那个最小值,反之,则新开一个系统(++m)
#include <cstdio>
int f[1005];
int main()
{
int n;
while(~scanf("%d",&n))
{
int m = 0;
f[1] = 0;
while(n--)
{
int i;
int height;
scanf("%d",&height);
for(i = 1;i <= m;++i)
if(height <= f[i])
{
f[i] = height;
break;
}
if(i > m)
f[++m] = height;
}
printf("%d\n",m);
}
return 0;
}