蓝桥杯 K好数(Java)
越来越觉得自己菜,一道简单的动态规划写不出来,题解也是看了很多份才看懂了,所以尽量以图表的方式写了题解,希望我的题解能帮到其他人吧。(;´Д`)
首先是题目:

输入描述:
输入包含两个正整数,K和L。
输入样例:
4 2
输出描述:
输出一个整数,表示答案对1000000007取模后的值。
输出样例:
7
1.首先我们初始化一个L行K列的数组(题目输入为4 2,所以先以4进制为例子,位数不限制)
用于表示
在L位的情况下,最后一位为K的符合条件的数字的个数

2.
四进制的情况下每一位能取的值为0到3
因为不能以0作为第一位数(因为后面计算两位数时出现00,02,03这种并不是两位数)
所以以0为第一位的有0种,以1为第一位的有1种,以2为第一位的有1种,以3为第一位的有1种,结果为0,1,1,1

3.两位数的以0结尾的数有20和30,因为10相邻不满足条件,
所以此时以0结尾的数的数量为2,
也就是在第二位为0的情况下,把第一位除了等于1以外的所有可能相加
(虽然把00这种不应该有的可能也加上去了,但是由于它本来就是0,所以不会有影响)

4.两位数的以1结尾的数有11和31,因为21相邻不满足条件,
所以此时以1结尾的数的数量为2,
也就是在第二位为1的情况下,把第一位除了等于0和2以外的所有可能相加

5.同理得到两位数的以0,1,2,3结尾的所有可能

6.接下来是三位数,
三位数的以0结尾的数只要考虑第2,第3位,也就是最后两位不会出现相邻的情况就可以了
所以和第三步同样在第三位为0的情况下,把第二位除了等于1以外的所有可能相加

7.最后是完整的表格

8.最后把第四行的14,10,8,15加起来就得到在4进制的情况下,四位数的K好数的数量(把第二行的加起来就是题目样例4 2的结果7)
接下来是代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Kgood {
public static BigInteger getNumberOfKGood(int l, int k) {
// 这是第一步定义的表格的二维数组
int [][] array = new int[l][k];
// 这是第二步的初始化,将一位的情况的结果设置为0,1,1,1......
for (int i = 1; i < k; i++) {
array[0][i] = 1;
}
// i代表表格的行,也就是位数
// j代表表格的列,也就是可能取的进制数
for (int i = 1; i < l; i++) {
for (int j = 0; j < k; j++) {
// 这里为第三步,也就是把这一位所能取的值遍历,并与上一位j做比较,筛选掉相邻的可能
for (int j2 = 0; j2 < k; j2++) {
if ((j != j2 + 1) && (j != j2 - 1)) {
// 按题目要求取模
array[i][j] = (array[i][j] + array[i-1][j2]) % 1000000007;
}
}
}
}
// 最后一步的取值,把最后一行的值加起来就是了
// 因为数据挺大的,所以遇事不决用大数[滑稽]
BigInteger sum = new BigInteger("0");
for (int i = 0; i < k; i++) {
sum = sum.add(new BigInteger(Integer.toString(array[l - 1][i])));
}
return sum.mod(new BigInteger("1000000007"));
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
int l = sc.nextInt();
BigInteger sum = getNumberOfKGood(l, k);
System.out.println(sum);
sc.close();
}
}
蓝桥杯 K好数(Java)的更多相关文章
- 蓝桥杯 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 ...
- 蓝桥杯 K好数(dp)
Description 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.1 ...
- 算法笔记_052:蓝桥杯练习Multithreading(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第 ...
- java实现第三届蓝桥杯方块填数
方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为6个部 ...
- java实现第七届蓝桥杯凑平方数
凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的. 比如:0, 36, 5948721 再比如: 1098524736 1, 25, 6390784 0, 4, 28 ...
- java实现第七届蓝桥杯七星填数
七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...
- java实现第六届蓝桥杯五星填数
五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11. 要求每条直线上数字和相等. 如图就是恰当的填法. 请你利用计算机搜索所有可能的填法有多少种. 注意:旋转或镜像后相同的算同 ...
- java实现第七届蓝桥杯方格填数
方格填数 题目描述 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (如果显示 ...
随机推荐
- Aajx
# Ajax入门及基本开发 ## # Ajax的基本概念 >> 概念: 界面异步传输技术: 将几种技术和在一起进行开发的一种编程方式: >> 基本应用场景: > Goog ...
- TOMCAT封装DBCP
## 数据源 ## #Tomcat封装的DBCP: >> 基本知识: tomcat在默认情况下已经集成了DBCP: >> JNDI: |-- 基本概念: 在tomcat启动的时 ...
- 差分放大电路的CMRR与输入电阻分析
分析了经典差分放大电路的共模抑制比CMRR与输入电阻RIN 1.经典差分放大电路 基于运放的经典差分放大电路在各模电教材中均能找到,利用分离电阻和运算放大器实现,如图1所示为一种差分放大电路: 图1 ...
- 【JavaScript】DOM之Document对象
JS(JavaScript) 一.Document对象 1.Document对象是什么 Document对象 是DOM的基本规范也是重要的对象之一,以访问,更新页面内容的属性和方法通过conslie. ...
- vue 组件中添加样式不生效
如何产生 在开发项目中遇到在组件中添加样式不生效的情况.具体场景如下 //// vue 组件 <template> <div class="box" data-v ...
- <select>标签,不要在select标签中写value属性!!!
<select> select标签,一个选择框标签,在开发中很多时候会用到这个标签,例如选择生日19**年,或者在segmentfault中编辑文章时选择'原创','转载',还是'翻译'等 ...
- HTTP入门(一):在Bash中curl查看请求与响应
HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...
- PC端如何下载B站里面的视频?
此随笔只是记录一下: PC端下载B站的视频,在blibli前面加上一个i 然后在视频上鼠标右键,视频另存为+路径即可 PS:网上其他的方法,比如在blibli前面加上kan,后面加上jj等,这些方 ...
- Simple: 一个支持中文和拼音搜索的 sqlite fts5插件
之前的工作关系,需要在手机上支持中文和拼音搜索.由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现.这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于 ...
- 使用openxml提取word中的文本和图片并转为Html
使用openxml提取word中的文本和图片 使用 openXml 提取 word 中的 Text 和 Drawing 使用 openXml 将 word 中的文本和图片转为Html 使用 openX ...