(2018-3)骨牌问题

问题描述:

有2*n 的地板,用1*2和 2*1 的骨牌进行铺地板。问共有多少种情况。结果对 999983 取余,1<=n<=10000

样例输入:

输入:

6

输出:

13

思路:

DP问题:找规律可以发现满足斐波那契数列

dp[1] = 1, dp[2] = 2, dp[3] = 3, dp[4] = 5, ...

定义一维dp数组,存放已经计算过的结果

#include <cstdio>
const int maxn = 10010;
int dp[maxn] = {0};
int main(){
    int n;
    scanf("%d", &n);
    dp[1] = 1;
    dp[2] = 2;
    for(int i = 3; i <= n; i++){
        dp[i] = (dp[i - 1] + dp[i - 2]) % 999983;
    }
    printf("%d", dp[n]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_35093872/article/details/87984732