增序子数组个数

问题描述:

    微软10.15笔试:对于一个数组{1,2,3}它的子数组有{1,2},{1,3}{2,3},{1,2,3},元素之间可以不是连续的,对于数组{5,9,1,7,2,6,3,8,10,4},

        升序子序列有多少个?或者换一种表达为:数组int a[]={5,9,1,7,2,6,3,8,10,4}  。求其所有递增子数组(元素相对位置不变)的个数,  

        例如:{5,9},{5,7,8,10},{1,2,6,8}。

 

思想: 动态规划

 

代码: 

 1 import java.util.Scanner;
 2 
 3 
 4 public class Main {
 5 
 6     public static void main(String[] argv){
 7         
 8         Scanner in = new Scanner(System.in);        
 9         String [] k = in.nextLine().split(" ");        
10         int [] s = new int[k.length];
11         int [] id = new int[k.length];
12         int [] out = new int[k.length];
13         int sum=0;
14         //System.out.println(k.length);
15         for (int i=0; i<k.length; i++){
16             s[i]=Integer.parseInt(k[i]);
17             out[i]=0;
18         }
19         in.close();
20         /* 每个值在数组中的大小序号 */
21         for(int i=0; i<s.length; i++){
22             int n=0;
23             for(int j=0; j<s.length; j++){
24                 if(s[i]>s[j])
25                     n++;
26             }
27             id[i]=n;            
28         }
29         //System.out.println(" "+id[0]+id[1]+id[2]+id[3]);
30         
31         /* 动态规划 */
32         for(int i=0; i<id.length; i++){
33             
34             out[id[i]]=out[id[i]]+1;
35             for(int j=0; j<id[i]; j++){
36                 out[id[i]]=out[id[i]]+out[j];
37             }
38             //System.out.println(" "+id[i]+": "+out[id[i]]);
39             sum=sum+out[id[i]];
40         }
41         
42         /* 输出结果 */
43         System.out.println(sum);
44         
45     }
46     
47 }

 

posted @ 2015-01-12 14:57  UDLD  阅读(413)  评论(0编辑  收藏  举报