JAVA版K好数--蓝桥杯

历经千辛万苦,也算是研究出来了这道题了。

这道题主要运用了动态规划(Dynamic Planning)的思想,何谓动态规划?其实就是将一个大问题分成一个个小问题,然后先通过把各个小问题都解决,自然而然大问题也就解决了。

这道题它问L位K进制中,有多少K好数(任意相邻两位数字不相临)


我的理解: K进制的意思是它每一位的组成只能从(0~K-1)中选取,如果你想直接求L位长的K进制数有多少K好数,可能有些复杂,不如先求1位长,再通过1位长求2位长……以此类推,便可以通过累加得出L位长的K好数总共有多少。

先上代码

   public static void KGoodNumber() {
Scanner sc = new Scanner(System.in);
long mod = 1000000007;
int radix = sc.nextInt();
int length = sc.nextInt();
long dp[][] = new long[length][jinzhi];
//二维数组第一维是表示长度,第二维表示该长度下开头的数字,该数组的值为满足前二条件的K好数的个数
for (int i = 0; i < radix; i++) {
dp[0][i] = 1;
}
for (int m = 1; m < length; m++) {
for (int j = 0; j < radix; j++) {
for (int x = 0; x < radix; x++) {
if (x != j + 1 && x != j - 1) {
//如果m位长的开头为j,m-1位长开头为x,并且x与j不相临
** dp[m][j] += dp[m - 1][x];
dp[m][j] %= mod;
}
}
}
}
long sum = 0;
//由于K好数不能以0开头,所以从1开始取
for (int y = 1; y < radix; y++) {
sum += dp[length - 1][y];
sum %= mod;
}
System.out.println(sum);
}

上个图来解释一下

图中L为长度 K为进制数,上面的图简单说明了 4进制 如何由 L=1的K好数推导出L=2的K好数。

我想借助这个图来说明上面由**标示的语句

这道题约束条件是任意两位数字不能相临,那么,我们就让它从L=1时的K好数和L=2时首数字与L=1的那个K好数的首数字不相临,那么这个L=2的数也就是K好数。依此类推。

最后要说的就是K好数的开头不能为零。所以计算长为L,由1~N-1开头的K好数的总和,即为本题的答案。

update by 2017/4/4 20:15

by 一枝猪

K好数--蓝桥杯的更多相关文章

  1. 算法---ALGO-3 Java K好数 蓝桥杯

    package Main; import java.io.InputStream; import java.util.Scanner; public class Main { public stati ...

  2. 方格填数--蓝桥杯---dfs

    答案:1580 相似题目:N皇后问题 注意要枚举的是什么 #include<iostream> #include<string.h> using namespace std; ...

  3. K倍区间 蓝桥杯

    问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  4. 蓝桥杯之K好数

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

  5. 蓝桥杯之K好数问题

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

  6. 算法笔记_077:蓝桥杯练习 K好数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4, ...

  7. 动态规划专题 多阶段决策问题 蓝桥杯 K好数

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

  8. 蓝桥杯 K好数

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

  9. 蓝桥杯 K好数(dp)

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

随机推荐

  1. Python爬虫从入门到放弃(二十二)之 爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序反爬虫:使用技术手段防止爬虫程序爬取数据误伤:反爬虫技术将普通用 ...

  2. 《Java从入门到放弃》入门篇:springMVC数据传递

    springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...

  3. 让你快速了解并掌握如何进行iOS开发技能

    首先你要花点时间针对objective-c语言的学习:毕竟这个是iOS开发的基础(你也可以尝试用Swift,但此项目只是针对OC),编程套路其实都是差不多,多写多想多实践:关于环境的搭建就不在本文进行 ...

  4. windows 2008 VPN(PPTP/L2TP)搭建

    PPTP和L2TP只差一步配置,现在苹果已经不支持PPTP,所以只能使用L2TP连接.废话不多说,下面开始搭建: 1.PPTP VPN 配置 新安装好的OS,进入系统,首先添加角色 勾选添加网络策略和 ...

  5. Ubuntu16.04LTS 环境下编译安装Xen

    一.编译安装xen4.6过程 操作系统使用ubuntu16.04,通过下载xen4.6的源代码并编译安装来创建xen4.6环境. 一.依赖包的安装 sudo apt-get install gcc m ...

  6. electron + vue 实践项目

    github地址 本地安装环境准备 安装node: * https://nodejs.org/en/download/ 配置webpack: npm install -g webpack(sudo权限 ...

  7. cvpr2017:branchout——基于CNN的在线集成跟踪

    1.引言 2017年CVPR上有不少关于跟踪的paper.CF方面最引人瞩目的应该是ECO了,CNN方面也有一些新的进展.Branchout是一个基于CNN用bagging集成的在线跟踪方法. con ...

  8. 01、Mybatis快速入门

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  9. windows10企业版怎么关闭自动更新

    windows10企业版怎么关闭自动更新..  我之所以选择关闭自动的更新的原因: 1.Windows版本是激活版的不是注册版的<其实我想说的是我用的是盗版的> 2.对于为什么禁止[系统更 ...

  10. 安装node/npm/webpack步骤

    nodejs软件的下载地址:https://nodejs.org/en/ 1.只要安装好了nodejs,就自动安装好了npm包. 2.在cmd中通过命令node -version查看是否安装好node ...