首页 > 其他分享 >(hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)

(hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)

时间:2023-05-07 22:09:30浏览次数:38  
标签:BigInteger 路径 hdu step static new 小兔 卡特兰



题目:

        

小兔的棋盘

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 802 Accepted Submission(s): 502


Problem Description


小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个问题,对于你来说应该不难吧!


 

Input


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


 

Output


对于每个输入数据输出路径数,具体格式看Sample。


 

Sample Input



1
3
12
-1



 

Sample Output



1 1 2
2 3 10
3 12 416024



 

Author


Rabbit


 

Source


RPG专场练习赛


 

Recommend


lcy



题目分析:

               卡特兰数的应用之一。属于“有一个n*n的矩阵,从左上角走到右上角的路径数(不能越过对角线)”。这道题其实不需要用到大数的。但是为了统一代码风格,凡是卡特兰数我都用JAVA来写。


相应的理论如下:

       1)卡特兰数原本的模型可以描述如下:“对于任意数k,前k个数中-1的个数总是小于或等于1的个数”。

       2)对于这道题,其实所求的路径就是“对于走到任一步k,前k步中向右的不熟总大于或等于向上的步数(否则就穿越对角线了)”>所以这道题可以使用卡特兰数来解决。

 

对于一个n*n的正方形网格,每次我们能向右或者向上移动一格,那么从左下角到右上角的所有在副对角线右下方的路径总数为

(hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)_卡特兰数

。同样引用Wikipedia上的一张图片来表示:

(hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)_java_02



代码如下:


import java.math.BigInteger;
import java.util.Scanner;


public class Main {

	static BigInteger catalans[] = new BigInteger[101];
	static BigInteger four = new BigInteger("4");
	static BigInteger two = new BigInteger("2");
	static BigInteger one = new BigInteger("1");
	
	
	/**
	 * 用于求卡特兰数
	 */
	public static void prepare(){
		
		catalans[1] = new BigInteger("1");
		
		int i;
		for(i = 2 ; i <= 100 ; ++i){
			catalans[i] = catalans[i-1].multiply(four.multiply(BigInteger.valueOf(i)).subtract(two)).divide(BigInteger.valueOf(i+1));
		}
	}
	
	public static void main(String[] args) {
		prepare();
		
		Scanner scanner = new Scanner(System.in);
		
		int t = 1;
		while(scanner.hasNext()){
			int n = scanner.nextInt();
			
			if(n == -1){
				return ;
			}

			//因为最后的结果应该是包含从左上角和右下角过去的两种解法.所以最后的结果需要乘以2
			System.out.println(t++ + " " + n + " " + catalans[n].multiply(two));
		}
	}
}
















                        


标签:BigInteger,路径,hdu,step,static,new,小兔,卡特兰
From: https://blog.51cto.com/u_5290007/6252579

相关文章

  • (hdu step 9.1.2)Doing Homework again(贪心——有n份作业,每份作业都有一定的完成时
    题目:DoingHomeworkagainTimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):63AcceptedSubmission(s):57 ProblemDescriptionIgnatiushasjustcomebackschoolfromthe30thACM/ICPC.Nowheha......
  • (hdu step 4.3.1)Tempter of the Bone(在特定的时间约束下,判断是否能够从起点达到终
    题目:TempteroftheBoneTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1134AcceptedSubmission(s):379 ProblemDescriptionThedoggiefoundaboneinanancientmaze,whichfascinatedhima......
  • (hdu step 3.2.6)Monkey and Banana(在第一关键字有序的情况下,根据第二关键字求最长
    题目:MonkeyandBananaTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):720AcceptedSubmission(s):455 ProblemDescriptionAgroupofresearchersaredesigninganexperimenttotesttheIQof......
  • (hdu step 3.2.7)免费馅饼(数塔变形:求所能接到馅饼的最大数)
    题目:免费馅饼TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1207AcceptedSubmission(s):508 ProblemDescription都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。......
  • hdu 1599 find the mincost route(无向图的最小环:求从一个点遍历所有节点以后回到原点
    题目:findthemincostrouteTimeLimit:1000/2000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):2801    AcceptedSubmission(s):1115ProblemDescription杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游......
  • smarty section start step max使用
    ......<tableborder="1"><{sectionname=iloop=$arrs}><tr><{sectionname=jloop=$arrs[i]}><td><{$arrs[i][j]}></td><{/section}></tr>......
  • Linux 进程调度之schdule主调度器
    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行一、调度单位简介1.1task_struct结构体简介对于Linux内核来说,调度的基本单位是任务,用structtask......
  • HDU 2108 Shape of HDU (判断凹凸)
    ShapeofHDUTimeLimit:3000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10350    AcceptedSubmission(s):4796ProblemDescription话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,“徐队”......
  • B. Sort with Step
    题意:    给定一个长度为n的数组,任意两个数如果满足i-j的绝对值等于k则可以互相交换,若不能通过此操作实现数组排序,则需要使用次数来强制交换,次数小于等于1输出次数,否则输出-1.分析:    最优情况下,找出需要操作的数的数量然后两两交换是次数最少的。代码:#incl......
  • elmentui的Steps 步骤条样式改造
    话不多说上代码<template><divstyle="padding:30px;height:300px;"><el-alert:closable="false"title="menu2"/><el-steps:active="active"finish-status="success"><......