zoukankan      html  css  js  c++  java
  • hdu2067:小兔的棋盘(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2067

    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

    解题思路:

    水题,只要算出对角线一侧的数目乘2就行了,这里对角线两边都求了一下。

    #include <stdio.h>
    #include <string.h>
    #define N 40
    long long dp[N][N];
    int main()
    {
    	long long n, i, j, ans, t = 0;
    	while (scanf("%lld", &n), n != -1)
    	{
    		n++;
    		ans = 0;
    		memset(dp, 0, sizeof(dp));
    		dp[1][1] = 1;
    		for (i = 2; i <= n; i++)
    		{
    			for (j = 1; j <= i; j++)
    				dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
    		}
    		ans += dp[n][n];
    	
    		memset(dp, 0, sizeof(dp));
    		dp[0][1] = 1;
    		for (i = 1; i <= n; i++)
    		{
    			for (j = i; j <= n; j++)
    				dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
    		}
    		ans += dp[n][n];
    		printf("%lld %lld %lld
    ", ++t, n-1, ans);
    	}
    	return 0;
    }
  • 相关阅读:
    必懂的wenpack优化
    必懂的webpack高级配置
    webpack基础知识
    vue-cli
    codemirror使用
    js实现二叉树
    react-生命周期
    window 批量修改或去除文件后缀名
    十分钟搞清字符集和字符编码
    php判断一个值是否在一个数组中,区分大小写-也可以判断是否在键中
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852558.html
Copyright © 2011-2022 走看看