蓝桥杯 算法训练 k好数 dp

注意一点:既然是一个自然数,那么最高位肯定不是0!初始化的时候从1到k-1

上代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>

using namespace std;

int k,n,dp[110][110];//[有几位][末尾是几] 2位4进制 
int MOD = 1000000007;

int main(){
    scanf("%d%d",&k,&n);
    for(int i = 1;i < k;i++){
        dp[1][i] = 1;
    }
    
    for(int i = 2;i <= n;i++){
        for(int j = 0;j < k;j++){
            for(int q = 0;q < k;q++){
                if(abs(q-j) != 1)
                    dp[i][j] = (dp[i][j] + dp[i-1][q])%MOD;
            }
        }
    } 
    
    int sum = 0;
    for(int i = 0;i < k;i++){
        sum =(sum + dp[n][i])%MOD;
    }
    
    printf("%d\n",sum);
    return 0;
} 

猜你喜欢

转载自www.cnblogs.com/xuyanqd/p/9050531.html
今日推荐