K好数--蓝桥杯
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好数--蓝桥杯的更多相关文章
- 算法---ALGO-3 Java K好数 蓝桥杯
package Main; import java.io.InputStream; import java.util.Scanner; public class Main { public stati ...
- 方格填数--蓝桥杯---dfs
答案:1580 相似题目:N皇后问题 注意要枚举的是什么 #include<iostream> #include<string.h> using namespace std; ...
- K倍区间 蓝桥杯
问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...
- 蓝桥杯之K好数
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22.30.3 ...
- 蓝桥杯之K好数问题
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
- 算法笔记_077:蓝桥杯练习 K好数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4, ...
- 动态规划专题 多阶段决策问题 蓝桥杯 K好数
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
- 蓝桥杯 K好数
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22.30.3 ...
- 蓝桥杯 K好数(dp)
Description 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.1 ...
随机推荐
- 如何快速高效地完成一个Android项目?
本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑.技术.团队和方法论的角度探讨如何快速高效地完成一个Android项目.当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而 ...
- easyui&8Jquery ztree树插件
7Jquery easyui前台UI框架 开发包: 7.1Layout页面布局 将课后资料中后台系统前台页面素材导入项目中 1.导入Jquery,easyui相关js,css文件 <link r ...
- MySQL锁与MVCC
--MySQL锁与MVCC --------------------2014/06/29 myisam表锁比较简单,这里主要讨论一下innodb的锁相关问题. innodb相比oracle锁机制简单许 ...
- WebSphere服务器已启动但是初始化失败问题
--WebSphere服务器已启动但是初始化失败问题 -----------------------------------------------2014/03/06 经常有开发同事反映,环境用着用 ...
- SQL语句Tips
1. 可以在FROM字句中指定多个表,表与表之间用逗号隔开,如下面所示. SELECT * FROM T1,T123 结果集是这两个表的笛卡尔乘积.
- RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字
关键字 使用描述 Close Application 关闭掉当前已经打开的APP Application,该关键字不需要接收任何的参数,但是使用该关键字的前提是已经打开了一个APP Applicati ...
- 2015 Tencent 线上模拟测试题
第一题 下面的程序的输出结果是: A. 134122 B. 123412 C. 14302012 D. 143212 #include <iostream> using namespac ...
- Three.js使用局部纹理更新
THREE.js开发的应用运行在iphone5下发现有些时候会崩溃,跟了几天发现是因为Sprite太多频繁更新纹理占用显存导致的.通常解决纹理频繁更新问题就要用到one draw all方法,放到纹理 ...
- fis3+vue+pdf.js制作预览PDF文件或其他
人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ...
- Win10家庭版设置桌面右键更换桌面壁纸
Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...