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 ...
随机推荐
- Tp3.2提交表单与操作表单
笔记笔记 先去建个表———— 然后把我输入的东西 存到表里: <input type="submit" id="tijiao" value="提 ...
- html5 mdn一些精彩的案例
https://developer.mozilla.org/zh_CN/docs/Games/Examples
- C语言库函数探究
1.strlen()求字符串长度 //模拟实现strlen函数 #include<stdio.h> #include<stdlib.h> #include<string. ...
- Jmeter 参数化请求实例
Jmeter 参数化请求实例 在jmeter中的请求可以参数化,其中参数化的方式有4种: 1.CSV Data Set Config 2.数据库 3.用户自定义变量 4.用jmeter中的函数获取参数 ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
- 不安分的this
不安分的this 前言:关于javascript中的this,上网一搜一大片的文章.惊! 而我个人认为要想分清this,就有必要先搞清楚“对象”. 目录: 一.函数对象的认识 二.this 一.函数对 ...
- sqlite数据库之简单操作
一 sqlite介绍 Sqlite是一种嵌入式数据库,类似于一个文件系统,是跟程序在一起的.跟mysql等数据库程序跟数据分离是不一样的. 应用场景:常用于保存本地配置,类似于本地文件系统,因此他内嵌 ...
- 关于Filter
[1].关于Filter Filter简介: Filter翻译为中文是过滤器的意思. Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener Filter的作用 ...
- Node.js之包与npm包管理工具
Node.js之包与npm包管理工具 1.Node.js中的包 1.1在一个包中包含如下内容: package.json:对包进行描述 在bin子目录中存放二进制文件 在lib子目录中存放JavaSc ...
- 【可视化】Echarts3图层
默认echarts中canvas组件的z-index等于2,所以如果想让一个块元素如div覆盖echarts组件,需要指定z-index:3或者更大