码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划-填格子问题 Domino and Tromino Tiling

时间:2018-09-02 01:56:04      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:递推   方式   dom   return   min   描述   div   class   动态   

2018-09-01 22:38:19

问题描述:

技术分享图片

问题求解:

本题如果是第一看到,应该还是非常棘手的,基本没有什么思路。

不妨先从一种简化的版本来考虑。如果仅有一种砖块,那么,填充的方式如下。

技术分享图片

从上面可以看出,本质上是一条动态规划问题,递推式就是Fib序列。

那么针对本问题,需要考虑的情况就复杂了一些。

技术分享图片

    public int numTilings(int N) {
        long[][] dp = new long[N + 1][2];
        dp[0][0] = 1;
        dp[1][0] = 1;
        int mod = (int)Math.pow(10, 9) + 7;
        for (int i = 2; i <= N; i++) {
            dp[i][0] = (dp[i - 1][0] + dp[i - 2][0] + 2 * dp[i - 1][1]) % mod;
            dp[i][1] = (dp[i - 1][1] + dp[i - 2][0]) % mod;
        }
        return (int)dp[N][0];
    }

 

动态规划-填格子问题 Domino and Tromino Tiling

标签:递推   方式   dom   return   min   描述   div   class   动态   

原文地址:https://www.cnblogs.com/TIMHY/p/9571992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!