C/C++:
1 #include<stdio.h> 2 int main() 3 { 4 // freopen("250.txt","r",stdin); 5 int a[22],b[22]; 6 int t,n,i,j,max; 7 scanf("%d",&t); 8 while(t--) 9 { 10 max=0; 11 for(i=0;i<22;i++) //b[]置0; 12 b[i]=1; 13 scanf("%d",&n); //输入n; 14 for(i=0;i<n;i++) 15 scanf("%d",&a[i]); 16 for(i=n-2;i>=0;i--) 17 { 18 max=0; 19 for(j=i+1;j<n;j++) //找出i~n符合条件的最大数 20 { 21 if(a[i]>a[j]) //注意 小细节: 题目给出下一发炮弹只能小于上一发 22 { 23 if(b[j]>max) 24 max=b[j]; 25 } 26 } 27 b[i]+=max; //最大数+1 28 } 29 max=0; 30 for(i=0;i<n;i++) 31 { 32 if(b[i]>max) 33 max=b[i]; 34 } 35 printf("%d ",max); 36 } 37 return 0; 38 }
java:
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner sc=new Scanner(System.in); 5 int t=sc.nextInt(); 6 int a[]=new int[22]; 7 int b[]=new int[22]; 8 while(t-->0){ 9 int n=sc.nextInt(); 10 for(int i=0;i<n;i++) 11 a[i]=sc.nextInt(); 12 for(int i=0;i<n;i++) 13 b[i]=1; 14 for(int i=n-2;i>=0;i--){ 15 int max=0; 16 for(int j=i+1;j<n;j++){ 17 if(a[i]>a[j]) 18 if(b[j]>max) 19 max=b[j]; 20 } 21 b[i]+=max; 22 } 23 int max=0; 24 for(int i=0;i<n;i++) 25 if(b[i]>max) 26 max=b[i]; 27 System.out.println(max); 28 } 29 } 30 }