问题描述

如果一个自然数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

数据规模与约定

对于30%的数据,KL <= 106

对于50%的数据,K <= 16, L <= 10;

对于100%的数据,1 <= K,L <= 100。

动态规划中多阶段决策问题的思想是每做一次决策(即一个阶段)就可以得到解的一部分,那么当所有的决策做完后,完整的解就出现了。

我们以此题为例,来看如何实现该问题的过程。

先简单将题意理解一下就是要求的整个数字串中每一个数字相邻的位置它们的数字不相邻的数字串的个数。

简单地来说,把题目的规模先减小,让自己好思考整个题目的思路。

比如如果长度是1,那么除了0之外的数字都可以填入。

如果长度为2呢,我这时必须知道两件事,第一它不相邻的数字有哪些(前一位),第二前一位某个数字以它为终点它所有的满足条件的总数。可以发现我要完成第二步是一定要用到第一步的。

即每个阶段由上一个阶段决定。

如果是长度3呢,当然也必须用到长度2的阶段的解。

我们用一个二维数组图来表示这样的过程。

当然这题还有一个坑点,如果你想用上一阶段的SUM减去某几个不符合的值的话,很有可能出现由于值过大,已经取模的值减去两个很大的值而出现负数,这时最好的解决办法是全用循环加,不要出现减。

代码如下:

 #include<iostream>
#include<cstdio>
#define MAXN 105
#define MOD %1000000007
using namespace std;
long long dp[MAXN][MAXN];
int main()
{
long long i,j,k,c,l,sum=;
cin>>k>>l;
//初始化第一个格子
dp[][]=;
for(i=;i<k;i++)
dp[i][]=;
sum=k-;
for(i=;i<=l;i++)
{//格子
for(j=;j<k;j++)
{
if(j==)
{
dp[j][i]=(dp[j][i]+(dp[j][i-])MOD)MOD;
for(c=;c<k;c++)
dp[j][i]=(dp[j][i]+(dp[c][i-])MOD)MOD;  //必须循环加,用sum减去一些值会负溢出!!
}
else if(j==k-)
{
for(c=;c<k-;c++)
dp[j][i]=(dp[j][i]+(dp[c][i-])MOD)MOD;
dp[j][i]=(dp[j][i]+(dp[j][i-])MOD)MOD;
}
else
{
for(c=;c<k;c++)
{
if(c!=j-&&c!=j+)
dp[j][i]=(dp[j][i]+(dp[c][i-])MOD)MOD;
}
}
//cout<<dp[j][i]<<" ";
}
sum=;
for(j=;j<k;j++)
sum=((sum)MOD+(dp[j][i])MOD)MOD;
// cout<<endl;
//cout<<sum<<endl;
}
cout<<sum<<endl;
return ;
}

动态规划专题 多阶段决策问题 蓝桥杯 K好数的更多相关文章

  1. 蓝桥杯 K好数

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

  2. 蓝桥杯 K好数(Java)

    越来越觉得自己菜,一道简单的动态规划写不出来,题解也是看了很多份才看懂了,所以尽量以图表的方式写了题解,希望我的题解能帮到其他人吧.(;´Д`) 首先是题目: 输入描述: 输入包含两个正整数,K和L. ...

  3. 蓝桥杯 K好数(dp)

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

  4. 2017第八届蓝桥杯 K倍区间

    标题: k倍区间 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  5. 蓝桥杯-k倍区间

    http://lx.lanqiao.cn/problem.page?gpid=T444 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, .. ...

  6. C语言网 蓝桥杯 1117K-进制数

    这是一道较难的题目,我刚开始用排列组合的方式来做,并没有做出来,故运用了的深搜算法. 深搜算法的概念: 选其中一条路,遍历完成后,逐步返回直至全部遍历,最后返回起点. 解题思路 : 题目中对零的个数没 ...

  7. 第七届 蓝桥杯 方格填数 dfs

    如下的10个格子  填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何 ...

  8. 蓝桥杯 方格填数 DFS 全排列 next_permutation用法

    如下的10个格子(参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个 ...

  9. 第十届蓝桥杯大赛-特别数的和-C++

    解法一(暴力获取): #include<stdio.h> #include<stdlib.h> int main(void) { int n; ; ; printf(" ...

随机推荐

  1. Windows 如何为绿色软件运行时添加参数 如最小化,无窗口运行

    1 有些软件运行的时候需要或者可以添加参数来实现一些特殊要求,比如开机自启动,运行时不显示主界面,不显示托盘图标等,比如下面的这个流量精灵软件,"urlcore.exe /h /r /t 4 ...

  2. LattePanda 项目之 P2.2 起飞条件检测系统(CLI & GUI)

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的链接.图片显示,请访问我的博客原文: http://www.cnblog ...

  3. react webapp 开发小结

    1.监听props的方法 componentWillReceiveProps(nextProps) { // } 2.监听state的方法 3.props 传递的方法 <AlarmList {. ...

  4. 【C语言】求两个数中不同的位的个数

    //求两个数中不同的位的个数 #include <stdio.h> int count_different(int a, int b) { int count = 0; int c = a ...

  5. Android录屏命令、Android录Gif、Android录视频

    NoHttp开源地址:https://github.com/yanzhenjie/NoHttp NoHttp具体使用文档已公布,你想知道的全都有,请点我移步! 版权声明:转载请注明本文转自严振杰的博客 ...

  6. byte数组和文件的相互转换

    /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...

  7. hive编程入门课程(加精)

    hive编程入门课程 http://wenku.baidu.com/link?url=BfyZWjz48G_6UJImzWw39OLB0sUrIYEYxoxNpaFbADUQekmOvQy4FPY1f ...

  8. Bullet Physics OpenGL 刚体应用程序模板 Rigid Simulation in Bullet

    利用Bullet物理引擎实现刚体的自由落体模拟的模板 Bullet下载地址 Main.cpp #include <GLUT/glut.h> #include <cstdlib> ...

  9. javascript 获取当前日期 月份 时间

    <script type="text/javascript"> function getDate() { var date = new Date(); //得到当前日期 ...

  10. netty+Protobuf (整合一)

    netty+Protobuf 整合实战 疯狂创客圈 死磕Netty 亿级流量架构系列之12 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 整合实战的 第一篇,完成一个 基于Ne ...