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;
        }
        
    }
  • 相关阅读:
    zend framework多模块配置
    java解析xml的几种方式
    jdbc操作步骤和preparedStatment相比Statment的好处
    Android UI 之实现多级列表TreeView
    python小游戏实现代码
    【iOS知识学习】_UITableView简介
    根据指定电话号码得到通讯录上的姓名
    HDU 4705 Y
    C#实现的内存分页机制的一个实例
    【编程程序猿艺术】学习记录1:指针向左翻转法的旋转串
  • 原文地址:https://www.cnblogs.com/liyinggang/p/5367259.html
Copyright © 2011-2022 走看看