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

首先是题目:

输入描述:

输入包含两个正整数,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)的更多相关文章

  1. 蓝桥杯 K好数

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

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

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

  3. 蓝桥杯 K好数(dp)

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

  4. 算法笔记_052:蓝桥杯练习Multithreading(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第 ...

  5. java实现第三届蓝桥杯方块填数

    方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为6个部 ...

  6. java实现第七届蓝桥杯凑平方数

    凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的. 比如:0, 36, 5948721 再比如: 1098524736 1, 25, 6390784 0, 4, 28 ...

  7. java实现第七届蓝桥杯七星填数

    七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...

  8. java实现第六届蓝桥杯五星填数

    五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11. 要求每条直线上数字和相等. 如图就是恰当的填法. 请你利用计算机搜索所有可能的填法有多少种. 注意:旋转或镜像后相同的算同 ...

  9. java实现第七届蓝桥杯方格填数

    方格填数 题目描述 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (如果显示 ...

随机推荐

  1. Java面试必问之Hashmap底层实现原理(JDK1.7)

    1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...

  2. Linux永久开放端口

    /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 3306 -j A ...

  3. 编写简单i18n库

    i18n是什么?i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称. 前言 第一次接触多语言是用野生java ...

  4. 关于org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.atguigu.crud.dao.DepartmentMapper.insertSelective的错误

    今天我在使用mybatis逆向工程的时候,由于一个疏忽字打错了..结果花了一早上才把错误找全..广大小伙伴们一定要小心啊(能复制粘贴就别手打) 关于org.apache.ibatis.binding. ...

  5. 开源网站云查杀方案,搭建自己的云杀毒-搭建ClamAV服务器

    开源网站云查杀方案,搭建自己的云杀毒 搭建ClamAV服务器 1        前言: 在上一篇我们已经演示了整个方案,传送门<开源网站云查杀方案,搭建自己的云杀毒>:https://ww ...

  6. (数据科学学习手札79)基于geopandas的空间数据分析——深入浅出分层设色

    本文对应代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 通过前面的文章,我们已经对geopanda ...

  7. Java 读取Word中的脚注、尾注

    本文介绍读取Word中的脚注及尾注的方法,添加脚注.尾注可以参考这篇文章. 注:本文使用了Word类库(Free Spire.Doc for Java 免费版)来读取,获取该类库可通过官网下载,并解压 ...

  8. Python3爬虫使用requests爬取lol英雄皮肤

    本人博客:https://xiaoxiablogs.top 此次爬取lol英雄皮肤一共有两个版本,分别是多线程版本和非多线程版本. 多线程版本 # !/usr/bin/env python # -*- ...

  9. 无损卡尔曼滤波UKF(3)-预测-生成Sigma点

    无损卡尔曼滤波UKF(3)-预测-生成Sigma点 1 选择创建Sigma点 A 根据 已知上一个时间戳迭代出来的 后验状态 x_{k|k} 和后验协方差矩阵 P_{k|k} 他们代表当前状态的分布. ...

  10. MySQL/InnoDB中的事务隔离级别

    SQL标准中的事务四种隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitted ...