铺砖 动态规划 DP

在这里插入图片描述
在这里插入图片描述

解题思路:首先我们定义dp[i]为i列时候铺砖的方法数,我们考虑2 * 2的时候,一共有3个方法,考虑3 * 2的时候,多出了一列,如果我们竖着直接放一个,方法数就和2 * 2时候一样,即3,也就是dp[i-1]个方法数,如果我们对3的后两列进行铺砖,我们只能横着放两个和竖着放一大个,为什么不能竖着放2个呢,因为这时候的方法数其实就和前面重叠了,所以只能加上2 * dp[i-2]。

所以得出:dp[i]=(dp[i-1]+2*dp[i-2])%100007;

#include<stdio.h>
int dp[255];
int main(){
    int n;
    scanf("%d",&n);
    dp[0]=1;
    dp[1]=1;
    for(int i=2;i<=n;i++){
        dp[i]=(dp[i-1]+2*dp[i-2])%100007;//及时取模
    }
    printf("%d\n",dp[n]);
    return 0;
}

有帮助就点个赞啵,来手赞赏也是非常妙的
在这里插入图片描述

发布了13 篇原创文章 · 获赞 13 · 访问量 328

猜你喜欢

转载自blog.csdn.net/qq_43320728/article/details/104508832