思路:d(i,j)表示以i开头,长度为j的K好数的个数,转移方程就是

  1. for(int u = 0; u < k; ++u) {
  2. int x = abs(i - u);
  3. if(x == 1) continue; //相邻的数字相同
  4. dp[i][j] += dp[u][j-1];
  5. }

还有就是可能答案很大一定要一边求解一边求余。 同余定理用起来,内存可用滚动数组优化。

AC代码

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <utility>
  6. #include <string>
  7. #include <iostream>
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. #include <queue>
  12. #include <stack>
  13. using namespace std;
  14. #pragma comment(linker, "/STACK:1024000000,1024000000")
  15. #define eps 1e-10
  16. #define inf 0x3f3f3f3f
  17. #define PI pair<int, int>
  18. typedef long long LL;
  19. const int maxn = 100 + 5;
  20. const int mod = 1000000007;
  21. int dp[2][maxn]; //d[i]表示以i开头的k好数个数
  22.  
  23. int main() {
  24. int k, l;
  25. scanf("%d%d", &k, &l);
  26. int f = 0, h = 1;
  27. for(int i = 0; i < k; ++i) dp[f][i] = 1;
  28. for(int i = 2; i <= l; ++i) {
  29. for(int j = 0; j < k; ++j) {
  30. dp[h][j] = 0;
  31. for(int ii = 0; ii < k; ++ii){
  32. int x = abs(j - ii);
  33. if(x == 1) continue; //相邻
  34. dp[h][j] += dp[f][ii];
  35. dp[h][j] %= mod;
  36. }
  37. }
  38. f = 1 - f;
  39. h = 1 - h;
  40. }
  41. int ans = 0;
  42. for(int i = 1; i < k; ++i) {
  43. ans += dp[f][i];
  44. ans %= mod;
  45. }
  46. printf("%d\n", ans);
  47. return 0;
  48. }

如有不当之处欢迎指出!

算法训练 K好数 数位DP+同余定理的更多相关文章

  1. 算法训练 K好数 (DP)

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

  2. 算法训练 K好数

      算法训练 K好数   时间限制:1.0s   内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...

  3. 算法训练 K好数 解析

    算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K ...

  4. Java实现 蓝桥杯 算法训练 K好数

    算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K ...

  5. 算法训练 K好数(C/C++)AC码

    蓝桥杯 算法训练 K好数 AC码 题目要求: 算法训练 K好数 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如 ...

  6. [蓝桥] 算法训练 K好数

    时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = ...

  7. k好数 数位dp

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

  8. 蓝桥杯 算法训练 K好数

    参考:https://blog.csdn.net/jjmjeffrey/article/details/69298110 https://www.cnblogs.com/TWS-YIFEI/p/634 ...

  9. Java实现 蓝桥杯VIP 算法训练 麦森数

    算法训练 麦森数 时间限制:1.0s 内存限制:256.0MB 问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底, ...

随机推荐

  1. scrapy_开发环境

    scrapy开发所具备的环境 IDE         pycharm 数据库           mysql, redis 开发环境       python 3.5

  2. hibernate 基础

    Hibernate:是开源的ORM框架技术,对jdbc进行了非常轻量级的对象封装,处于业务逻辑层和数据库层之间,称作持久化层. 持久化层的作用:把程序生成的对象持久化到数据库,也就是保存到数据库.   ...

  3. struts2 利用通配符方式解决action太多的问题

    <!-- 创建包default,继承struts-default -->    <package name="default" extends="str ...

  4. 如何用Python爬虫实现百度图片自动下载?

    Github:https://github.com/nnngu/LearningNotes 制作爬虫的步骤 制作一个爬虫一般分以下几个步骤: 分析需求 分析网页源代码,配合开发者工具 编写正则表达式或 ...

  5. Django 部署到Nginx

    在网上搜了很多篇Django+uwsgi+Nginx的部署文章,忙了一下午头昏脑胀,最终完成了部署.部署文章流程讲解都很好,但在细节上或许缺乏一些注意力,导致我多篇文章来回切换在字里行间寻找蛛丝马迹. ...

  6. Git多帐号配置,管理多个SSH

    查看自己所有的SSH-Key $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 如果你已经创建过git账号那你可能和我一样会看到只有一个SSH-Key, 这 ...

  7. 一个特殊的List去重问题的解决方案

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html 场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且 ...

  8. @RequestMapping注解

    Spring MVC中用于参数绑定的注解有很多,都在org.springframework.web.bind.annotation包中,根据它们处理的request的不同内容部分可以分为四类(主要讲解 ...

  9. easyui_datagrid 行内使用comobox的编码实现

    easyui datagrid组件的列属性中有一个editor属性,官方介绍如下: 所以,我们可以通过编码实现datagrid行内插入comobox的方式来实现某些场合的需要,具体编码实现如下: // ...

  10. 浅谈ASP.NET配置文件加密

    在刚刚完成的一个ASP.NET项目中,遇到了这么一个问题,项目部署到生产环境中时,领导要求项目中的配置文件(如web.config,app.config)中不能出现敏感字符,如:数据库连接,等等. 第 ...