题目如图。
#include<stdio.h>
#include<string.h>
int a[1000];
int d[1000];
int main()
{
int n;
while( ~scanf("%d",&n) )
{
int i, j, k, t, q;
int mlc,max;
for(i=0;i<=n;i++)
d[i]=1;
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=n-2; i>=0; i--)
for(j=i+1;j<n;j++)
if(a[i]>=a[j])
{
q=0;
for(k=j+1;k<n;k++)
{
if(d[j]<d[k]&&a[i]>a[k])
{q++;}
}
if(q==0)
{
d[i]=d[i]+d[j];
break;
}
}
mlc=0;
for(i=0;i<n;i++)
if(d[i]>d[mlc])
mlc=i;
printf("%d\r\n",d[mlc]);
}
return 0;
}
解题代码。
这个代码的想法是。
将一次的导弹数字放入数组,定义一个对应属性,值为1,代表它自己是一颗导弹。从最后开始,找到它后面第一个 比它小并且其属性最大的值 相加,最后找到属性最大的数字就是答案。