#include<cstdio>
const int maxn=100000;
int n,kase,temp,a[maxn];
int main()
{
while(scanf("%d",&n)==1)
{
int j;
kase=0;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
if(i==0)
a[i]=temp;
for(j=0;j<=kase;j++)
{
if(a[j]>=temp)
{
a[j]=temp;
break;
}
}
if(j>kase)
{
a[++kase]=temp;
}
}
printf("%d\n",kase+1);
}
return 0;
}
该题是特别注意思考要完整,不要认为一套设备只可以连续的用一段来轰击炮弹,而是可以不连续的,在之后如果有一个值P输入的高度比前面N个已经用了的设备的最矮高度都要矮的话,那么实际上是可以对于每一个都可以用的,在该值之后下一个值Q如果较大的话(比P要大的话),按本来连续的想法应该又产生了一个设备,而实际上按不连续的想法,实际上如果Q可以在之前N套设备找到合适的,那么又可以更新一套设备的最矮值即可。
HDU 1257
最新推荐文章于 2022-11-15 18:34:15 发布