zoukankan      html  css  js  c++  java
  • 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;
        }
        
    }
  • 相关阅读:
    量化投资_期货日内交易几个问题的考证
    量化投资_上一个交易时间段对今日收盘价涨跌的影响
    RunJS
    sublime3快捷 输入html
    NLP学习资源
    Invert Binary Tree
    定时任务 Crontab命令 详解
    根据职位名,自动生成jd
    使用python + tornado 做项目demo演示模板
    Awk 实例
  • 原文地址:https://www.cnblogs.com/liyinggang/p/5367259.html
Copyright © 2011-2022 走看看