蓝桥杯 k好数 动态规划dp超详解

题目

问题描述
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。
输入格式
输入包含两个正整数,K和L。
输出格式
输出一个整数,表示答案对1000000007取模后的值。
样例输入
4 2
样例输出
7

解析与解答

1、这道题先进行题目的分析(解题思想的确定)

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。

那么,可以知道,是要对L位,各个数位上的数字进行分析。先假设第一位上的数字(范围是0~k-1),然后对后边加入的每一位数字进行分析,要求新加入的数字与前一位的数字的差的绝对值不为1。
这是一个满足“将待求解的问题分为若干个相互联系的子问题”,这一思路的题目。所以,应该使用动态规划的思路来解题。
2、确定如何具体的实现动态规划
因为动态规划的解题整体思路是:将待求解的问题分为若干个相互联系的子问题,即“重复子问题”,只在第一次遇到的时候求解,然后将这个子问题的答案保存,在选择的时候是从以前求出的若干个与本步骤相关的子问题中选最优的那个,加上这一步的值来构成这一步那个子问题的最优解 。
所以先要对如何进行 对前面的子问题答案中选择 本步骤相关的子问题中选最优的那个。所以,先对于本问题简单的情况进行分析:
①先分析题目所给范例:k=4 L= 2
其中,行表示数最高位的数字(<4,其实最高位不可以是0,但是因为在动态规划的过程中需要使用到这种情况,所以就将这种情况列出来,只是在计算最终的可能情况数时,不加入最高位时0的情况即可),
列表第几位(<=L)

注:i表示是几位数时的情况
j表示最高位数字是 几 的情况
本题的思路是:最高位为 j 时,那么与它相邻的位数(次高位)一定要满足与他的差值不能为1(次高位跟最高位不是相邻数字)。按照这个思路递推,从 j=L,到 j=1的情况。

i\j 0 1 2 3
1 1 1 1 1
2 3 2 2 3

如果,你觉得这种情况太过于简单,没办法让你更好的理解动态规划的过程。那我们来进行稍微复杂的情况的分析:
k=5 L= 3
注意:表格的第二行,即位数为1时,是对L=1的情况的说明,也是为L>1的情况赋的初值

注:i表示是几位数时的情况
j表示最高位数字是 几 的情况
本题的思路是:最高位为 j 时,那么与它相邻的位数(次高位)一定要满足与他的差值不能为1(次高位跟最高位不是相邻数字)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值