/*题目描述:
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,
但是以后每一发炮弹都不能高于或者等于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,
请计算这套系统最多能拦截多少导弹。
输入:
第一行输入测试数据组数n(1<=n<=10)
接下来输入 这组测试数据共有多少个导弹m(1<=m<=20)
接下里输入导弹依次飞来的高度,所有高度均是大于0的正整数
输出:
输出最多能够拦截的导弹数目
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,
但是以后每一发炮弹都不能高于或者等于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,
请计算这套系统最多能拦截多少导弹。
输入:
第一行输入测试数据组数n(1<=n<=10)
接下来输入 这组测试数据共有多少个导弹m(1<=m<=20)
接下里输入导弹依次飞来的高度,所有高度均是大于0的正整数
输出:
输出最多能够拦截的导弹数目
样列输入
2
8
389 207 155 300 299 170 158 65
3
88 34 65
*/
2
8
389 207 155 300 299 170 158 65
3
88 34 65
*/
#include<stdio.h>
int main()
{
int n,m;//n为测试的组数,m为每组数据个数
int h[21]={0};//将m个数据存入,即为每个导弹高度
int dp[20]={0};
int max=0;
scanf("%d\n",&n);
while(n--) //录入组数
{
scanf("%d",&m);//每组共计m个数字
for(int i=0;i<m;i++)//将每组m个数据依次存放入h[i]数组中
{
scanf("%d",&h[i]);
dp[i]=1;//默认导弹可以拦截一枚
int temp=0;
for(int j=0;j<i;j++)//每次存入一个数据均和之前已经存的数比较
{
if (h[i]<h[j])//如果刚录入的数比之前的数小
{
temp=dp[j]+1;//则拦截的导弹数加以一
if(temp>dp[i])//拦截和之前不拦截比较,如果可以拦截后比不拦截数目多
{
dp[i]=temp; //为dp赋新的值
}
}
}
if(dp[i]>max)//录入的数据与之前录入数据比较结果
max=dp[i];
}
printf("%d\n",max);
}
return 0;
}
int main()
{
int n,m;//n为测试的组数,m为每组数据个数
int h[21]={0};//将m个数据存入,即为每个导弹高度
int dp[20]={0};
int max=0;
scanf("%d\n",&n);
while(n--) //录入组数
{
scanf("%d",&m);//每组共计m个数字
for(int i=0;i<m;i++)//将每组m个数据依次存放入h[i]数组中
{
scanf("%d",&h[i]);
dp[i]=1;//默认导弹可以拦截一枚
int temp=0;
for(int j=0;j<i;j++)//每次存入一个数据均和之前已经存的数比较
{
if (h[i]<h[j])//如果刚录入的数比之前的数小
{
temp=dp[j]+1;//则拦截的导弹数加以一
if(temp>dp[i])//拦截和之前不拦截比较,如果可以拦截后比不拦截数目多
{
dp[i]=temp; //为dp赋新的值
}
}
}
if(dp[i]>max)//录入的数据与之前录入数据比较结果
max=dp[i];
}
printf("%d\n",max);
}
return 0;
}