nyoj 236拦截导弹 简单动归(java)

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 }
原文地址:https://www.cnblogs.com/asd1234/p/3348825.html