算法训练 K好数

时间限制:1.0s 内存限制:256.0MB

提交此题 锦囊1 锦囊2

问题描述

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。

输入格式

输入包含两个正整数,K和L。

输出格式

输出一个整数,表示答案对1000000007取模后的值。

样例输入

4 2

样例输出

7

数据规模与约定

对于30%的数据,KL <= 106;

对于50%的数据,K <= 16, L <= 10;

对于100%的数据,1 <= K,L <= 100。

有人说这是数位DP,我信了;

DP策略就是从局部到整体,dp[i][j]代表的是位长为i,并且首位是j时状态的总方案数,那么如何用dp[i-1]推到dp[i]呢?

策略如下:由题意得两个相邻位数其值不想邻,我们只需要剔除这种情况即可;

打个比方:设k=3,l=3 如何表示长度为3的方案数呢?

我们得到下面等式:总方案数由下面相加:dp[3][0],dp[3][1],dp[3][2]

并且:

dp[3][0]=dp[2][2]

dp[3][1]=0

dp[3][2]=dp[2][0]

我们决定长度为3时的首位数,然后剔除相邻的情况,拓展到长度为2的情况;

#include <iostream>
#include <cstdio>
using namespace std;
#define MOD 1000000007
int dp[105][105];
int main() {
int k,l;
cin>>k>>l;
for(int i=0;i<k;i++) {
dp[1][i]=1;
}
for(int i=2;i<=l;i++)
for(int j=0;j<k;j++)
for(int m=0;m<k;m++) {
if(j!=m+1&&j!=m-1) {
dp[i][j]+=dp[i-1][m];
dp[i][j]%=MOD;
}
}
int sum=0;
for(int i=1;i<k;i++) {
sum+=dp[l][i];
sum%=MOD;
}
cout<<sum<<endl;
return 0;
}

算法训练 K好数 解析的更多相关文章

  1. 算法训练 K好数

      算法训练 K好数   时间限制:1.0s   内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...

  2. Java实现 蓝桥杯 算法训练 K好数

    算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K ...

  3. 算法训练 K好数(C/C++)AC码

    蓝桥杯 算法训练 K好数 AC码 题目要求: 算法训练 K好数 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如 ...

  4. 算法训练 K好数 数位DP+同余定理

    思路:d(i,j)表示以i开头,长度为j的K好数的个数,转移方程就是 for(int u = 0; u < k; ++u) { int x = abs(i - u); if(x == 1) co ...

  5. [蓝桥] 算法训练 K好数

    时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = ...

  6. 算法训练 K好数 (DP)

    问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...

  7. 蓝桥杯 算法训练 K好数

    参考:https://blog.csdn.net/jjmjeffrey/article/details/69298110 https://www.cnblogs.com/TWS-YIFEI/p/634 ...

  8. Java实现 蓝桥杯VIP 算法训练 麦森数

    算法训练 麦森数 时间限制:1.0s 内存限制:256.0MB 问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底, ...

  9. 蓝桥杯 算法训练 ALGO-117 友好数

    算法训练 友好数   时间限制:1.0s   内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1+3=4 ...

随机推荐

  1. Mysql 在 Windows环境下安装:应用程序无法正常启动0xc000007b

    DirectX 修复工具 v3.7增强版 链接: https://pan.baidu.com/s/135pZUNwpXcMZjyLB41sQCg 密码: gtb5

  2. 学习笔记-AngularJs(二)

    在接下来学习angularjs中,我按照的就是之前 学习笔记-AngularJs(一)所讲的目录来搭建一个学习的项目,做一个互联网大佬人物简介的例子,当然也可以使用angualrjs上面提供的官方例子 ...

  3. jsp中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  4. JS时间戳和时间之间转换

    一.时间转换时间戳 var date = new Date(); //时间对象 var str = date.getTime(); //转换成时间戳 二.时间戳转换为时间 1.转换成形如 ‎2018‎ ...

  5. 关于collectionview布局的坑

    不知道写了多少次collectionview,步了很多坑,现在看来虽然达到了自己想要的结果,却不知道其中所以然.还是总结一下,免得再走弯路: 场景是这样的,我要定制一个显示选择图片的排列,想要实现横向 ...

  6. [Leetcode 739]*还有几天会升温 Daily Temperatures

    [题目] Given a list of daily temperatures T, return a list such that, for each day in the input, tells ...

  7. GTX使用(更新中)

    1.XILINX GTX介绍GTX是Virtex系列 FPGA上的低功耗吉比特收发器,在V6芯片上GTX工作带宽范围是750Mb/s到6.6Gb/s,支持收发双向,且收发双向独立.GTX接收和发送方向 ...

  8. java中String的equals()和 ==

    String a=new String("java"); String b=new String("java"); System.out.println(a.e ...

  9. Java语法基础学习DayTwo

    一.数据类型补充问题 数据类型的自动转换等级: byte,short,char -- int -- long -- float -- double long是8个字节,float是4个字节,为什么是这 ...

  10. 构造方法调用另一个构造方法,用this

    using System; class Person { public int age; public string name; public Person(int age, string name) ...