正题

题目链接:https://www.luogu.org/problemnew/show/P2657


题目大意

求A∼BA\sim BA∼B中不含前导零且没两个相邻的位数相差至少为222的数字个数。


解题思路

考虑记忆化搜索,用fi,jf_{i,j}fi,j​表示到第iii位数字为jjj时的方案数。

然后用1∼B1\sim B1∼B中的个数减去1∼A−11\sim A-11∼A−1中的个数

然后fi,j=∑k=1nfi+1,k∗(∣j−k∣≥2)f_{i,j}=\sum_{k=1}^n f_{i+1,k}*(|j-k|\geq 2)fi,j​=k=1∑n​fi+1,k​∗(∣j−k∣≥2)

但是有些限制要不能超过kkk,所以我们用两个布尔变量zerozerozero表示是否处于前导零,limstlimstlimst表示前面的位数是否都处于最大位(因为这样的话本位就不能超过最大位)。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int A,B,f[15][15],num[15];
int dfs(int l,int last,int limst,int zero)
{if(!l) return 1;if(!limst&&!zero&&f[l][last]!=-1)return f[l][last];int p,sum=0,maxn=limst?num[l]:9;for(int i=0;i<=maxn;i++){if(abs(i-last)<2) continue;p=i;if(zero&&p==0) p=-2;sum+=dfs(l-1,p,limst&&(i==maxn),(p==-2));}if(!limst&&!zero) f[l][last]=sum;return sum;
}
int count(int x)
{int k=0;while(x){num[++k]=x%10;x/=10;}memset(f,-1,sizeof(f));return dfs(k,-2,1,1);
}
int main()
{scanf("%d%d",&A,&B);printf("%d",count(B)-count(A-1));
}

P2657-[SCOI2009]windy数【数位dp,dfs】相关推荐

  1. 洛谷 P2657 [SCOI2009] windy数 数位DP

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...

  2. P2657 [SCOI2009]windy数(数位dp)

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 输入输出格式 输 ...

  3. 题解 BZOJ1026 luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

  4. P2657 [SCOI2009]windy数 数位dp入门

    参考了题解,理解仍然还不够透彻 #include<bits/stdc++.h> using namespace std; const int N=550; const int maxn=1 ...

  5. BZOJ1026 [SCOI2009]windy数 数位dp

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1026 题目概括 求区间[A,B]中有多少数满足下面的条件. 条件:该数相邻两位之差不小于2. 题解 ...

  6. bzoj 1026: [SCOI2009]windy数 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

  7. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

  8. BZOJ1026: [SCOI2009]windy数(数位dp)

    题意 题目链接 Sol 很zz的数位dp $f[i][j]$表示第$i$位,前一位是$j$的方案数 转移的时候枚举一下是否相同即可 注意当lim达到上界的时候是不能记忆化的! /**/ #includ ...

  9. [BZOJ1026] [SCOI2009] windy数 (数位dp)

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...

  10. P2657 [SCOI2009]windy数

    P2657 [SCOI2009]windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B ...

最新文章

  1. 使用ISA Server发布具有Edge角色的Exchange Server环境
  2. Unity 2D游戏开发教程之游戏中精灵的跳跃状态
  3. 2008年校本培训之论文 封面
  4. mysql 数值类型 长度_mysql中的数据类型的长度
  5. 开启未来十年的编码技术之门
  6. cbrgen和setdest数据流生成
  7. Installing Flex Data Services on JBoss
  8. java知识点3(null、引用相关知识(自己理解))
  9. Pcshare远控源码偏重分析(一)
  10. 返利网是如何做到订单跟踪的?
  11. C++ OpenCV相机标定---实心圆点、棋盘格
  12. Oracle一次性查询超过1000条数据的方法(分批查询)
  13. 安卓手机电脑投屏软件【apowermirror、虫洞投屏软件】
  14. Linux启动时间优化-内核和用户空间启动优化实践
  15. Matlab绘制多个折线图的方法
  16. 如何用快慢指针在链表找到中间点
  17. matlab中函数参数和变量作用域
  18. 开发工具---Eclipse 教程Ⅰ
  19. 当excel不够用时,如何利用Access进行数据分析?
  20. 世上最小的卡片电脑 RaspberrysPi Zero W 入手体验

热门文章

  1. 面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官
  2. java线程带来的异常,java多线程练习之捕获子线程异常例子
  3. 关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...
  4. 云服务器下行_腾讯云轻量应用服务器简单测评
  5. css less 不要作用到子对象_使用Less实现网站主题切换
  6. Excel学习使用教程
  7. html如何显示上传进度条,HTML5 Ajax文件上传进度条如何显示
  8. [Java基础]字节,字符打印流
  9. C++ class实现顺序队列(完整代码)
  10. 一个毕设的建成——记录下我毕设途中的《SOP》