• hdu 1130,hdu 1131(卡特兰数,大数)


    How Many Trees?

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 3382    Accepted Submission(s): 1960


    Problem Description
    A binary search tree is a binary tree with root k such that any node v reachable from its left has label (v) <label (k) and any node w reachable from its right has label (w) > label (k). It is a search structure which can find a node with label x in O(n log n) average time, where n is the size of the tree (number of vertices).

    Given a number n, can you tell how many different binary search trees may be constructed with a set of numbers of size n such that each element of the set will be associated to the label of exactly one node in a binary search tree?
     
    Input
    The input will contain a number 1 <= i <= 100 per line representing the number of elements of the set.
     
    Output
    You have to print a line in the output for each entry with the answer to the previous question.
     
    Sample Input
    1 2 3
     
    Sample Output
    1 2 5
     
    题意:由 n个结点组成二叉树的种数
    卡特兰数+BigInteger
    import java.math.BigInteger;
    import java.util.Scanner;
    
     
    public class Main {
        public static void main(String[] args) {
            BigInteger [] h = new BigInteger[101];
            h[1] = new BigInteger("1");
            for(int i=2;i<=100;i++){
                h[i] = h[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
            }
            Scanner sc =new Scanner (System.in);
            while(sc.hasNext()){
                int n =sc.nextInt();
                System.out.println(h[n]);
            }
        }
    }

     hdu:1131  由n个带编号的结点组成二叉树的个数

    思路:卡特兰数乘上编号的全排列

    import java.math.BigInteger;
    import java.util.Scanner;
    
     
    public class Main {
        public static void main(String[] args) {
            BigInteger [] h = new BigInteger[101];
            h[1] = new BigInteger("1");
            for(int i=2;i<=100;i++){
                h[i] = h[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
            }
            Scanner sc =new Scanner (System.in);
            while(sc.hasNext()){
                int n =sc.nextInt();
                if(n==0)break;
                System.out.println(h[n].multiply(fac(n)));
            }
        }
    
        private static BigInteger fac(int n) {
            BigInteger sum = BigInteger.valueOf(1);
            for(int i=1;i<=n;i++) sum=sum.multiply(BigInteger.valueOf(i));
            return sum;
        }
        
    }
  • 相关阅读:
    ubuntu 通过命令将数据复制到u盘
    项目感言--功能的模块化
    java 中变量的存储与引用
    java 基础拾漏
    自动完成--autoComplete插件(2)
    自动完成--autoComplete插件
    Linux查看端口
    Linux查看系统信息
    js splice方法
    slice、substring、substr
  • 原文地址:https://www.cnblogs.com/liyinggang/p/5367259.html
Copyright © 2020-2023  润新知