zoukankan      html  css  js  c++  java
  • 数位dp(K好数)

    Description

    如果一个自然数NK进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求LK进制数中K好数的数目。例如K=4,L=2的时候,所有KK好数为11、13、20、22、30、31、33 共7个。给定KL,求LK好数的数目。

    Input

    从文件读入数据,第一行为K、L,其中K16L10

    Output

    将结果输出

    Samples

    Input Copy
    4 2
    Output
    7

    Source

    学习数位dp就知道f[i][j]////一共有i位且最高位是j的方案数

    这个题就是K进制的话,就是最高位最对时K-1

    这给题有一个坑就是最高位时1的话就是有k个数,就是得算上0

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    void out(__int128 x) {
        if (x < 0) {
            x = -x;
            putchar('-');
        }
        if (x >= 10) out(x / 10);
        putchar(x % 10 +'0');
    }
    const int maxn=20;
    ll f[maxn][maxn];////一共有i位且最高位是j的方案数
    int kk,l;
    void inint(){
        cin>>kk>>l;
        for(int i=0;i<=kk-1;i++){
            f[1][i]=1;
        }
        for(int i=2;i<=l;i++){
            for(int j=0;j<kk;j++){
                for(int k=0;k<kk;k++){
                    if(abs(j-k)!=1){
                        f[i][j]=(f[i][j]+f[i-1][k]);
                    }
                } 
            }
        }
    }
    int main(){
        inint();
        ll ans=0;
        if(l==1){
            cout<<kk<<endl;
            return 0;
        }
        for(int i=1;i<=kk-1;i++){
            ans=(ans+f[l][i]);
        }
        printf("%lld
    ",ans);
    } 
  • 相关阅读:
    移动平台的meta标签-----神奇的功效
    JAVA工程命名规范
    linux 查看tomcat 实时日志
    linux 配置全局jdk环境
    AJAX 前后端交互 验证信息是否正确
    数据库更新DATE类型的时间
    jq 克隆 移除table
    eclipse 安装javaEE插件 和htmlxmljsp编辑器
    oracle 正序 逆序 排序查询
    JQ遍历 input 并修改name属性
  • 原文地址:https://www.cnblogs.com/lipu123/p/14305907.html
Copyright © 2011-2022 走看看