• hdu 2067 兔子板


    兔子板
    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2374    Accepted Submission(s): 1393


    Problem Description
    小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。

    只是没过几天发现了棋盘的好玩之处。

    从起点(0。0)走到终点(n,n)的最短路径数是C(2n,n),如今小兔又想假设不穿越对角线(但可接触对角线上的格点),这种路径数有多少?小兔想了非常长时间都没想出来,如今想请你帮助小兔解决问题,对于你来说应该不难吧!
     


    Input
    每次输入一个数n(1<=n<=35),当n等于-1时结束输入。
     


    Output
    对于每一个输入数据输出路径数,详细格式看Sample。
     


    Sample Input

    12 

    -1


    Sample Output
    1 1 2
    2 3 10
    3 12 416024


    分析:

    1.从起点(0。0)走到终点(n,n)的最短路径数是C(2n,n)(=(2n)!/[(n!)*(2n-n)!])

    2.从起点(0,0)走到终点(n,n)不穿越对角线(但可接触对角线上的格点)的最短路径数是Catalan数*2(=h(n)*2)



    卡塔兰数:

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int main ()
    {
    	int i,j,n;
    	int k=1;
    	__int64 a[40][40];
    	while(scanf("%d",&n)!=EOF&&n!=-1)
    	{  	
    	  memset(a,0,sizeof(a));
    	  for(j=0;j<=35;j++)
    	     a[0][j]=1;  // 初始化
    		
    	   for(i=1;i<=35;i++)
    		for(j=i;j<=35;j++)
    		    a[i][j]=a[i-1][j]+a[i][j-1];  //Catalan数
          printf("%d %d %I64d
    ",k++,n,a[n][n]*2);//路径数为Catalan数的两倍
    	}
    	return 0;
    }
    
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    July 08th. 2018, Week 28th. Sunday
    July 07th. 2018, Week 27th. Saturday
    兄弟组件bus传值
    vue 父子组件传值
    路由传值的三种方式
    jQuery 操作表格
    原生js实现开关功能
    跨域解决方法
    正则判断密码难度
    cookie封装函数
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4734920.html
Copyright © 2020-2023  润新知