题目背景

windy 定义了一种 windy 数。

题目描述

不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。windy 想知道,在 a 和 b 之间,包括 a 和 b ,总共有多少个 windy 数?

输入格式

输入只有一行两个整数,分别表示 a 和 b。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1复制

1 10

输出 #1复制

9

输入 #2复制

25 50

输出 #2复制

20

说明/提示

数据规模与约定

对于全部的测试点,保证 1 \leq a \leq b \leq 2 \times 10^91≤a≤b≤2×109。

#include <bits/stdc++.h>
using namespace std;
int dp[15][15]; //dp[i][j] 表示位数位i 最高位为j 的方案数
void init()
{for(int i = 0;i < 10; i++)dp[1][i] = 1;for(int i = 2;i <= 10; i++){ //递推方式 随着位数增加递推 每次在数的头加一位数for(int j = 0;j < 10; j++){ //只需要判断前两位数的差是否大于等于二for(int k = 0;k < 10; k++){//后面的位数在前面以及判断过了if(abs(j-k) >= 2) dp[i][j] += dp[i-1][k];}}}
}
int query(int n) //因为查询的是一个区间 所以可以先查询一到左区间 再查询一到右区间 然后相减
{int a[15],cnt = 0;while(n){cnt++;a[cnt] = n % 10;n /= 10;}int sum = 0; //答案for(int i = 1;i < cnt; i++){//位数小于n的位数的数肯定小于n 加上for(int j = 1;j < 10; j++){sum += dp[i][j];}}for(int i = 1;i < a[cnt]; i++)//位数等于n的位数 最高位小于n的最高位的数肯定小于n 加上sum += dp[cnt][i];for(int i = cnt-1;i > 0; i--){//位数相等且最高位相等 这时候就要开始枚举每个位了for(int j = 0;j < a[i]; j++){//先是第cnt位相等 加上第cnt-1位小于的情况if(abs(a[i+1]-j) >= 2) //然后第cnt-1位相等 加上第cnt-2位小于的情况sum += dp[i][j];  //可以发现这个答案是没有包括n的贡献的}                         //所以区间查询的时候要加1才是到1到n的答案数if(abs(a[i+1]-a[i]) < 2) break;}return sum;
}
int main()
{int l,r;cin >> l >> r;init();cout << query(r+1) - query(l);return 0;
}

洛谷P2657 windy 数 数位dp相关推荐

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

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

  2. 洛谷2657 windy数(数位DP)

    传送门 [题目分析] 数位DP经典题了. 考虑直接统计R内的windy数和L-1内的windy数,两者相减即为L~R之间的windy数. 考虑DP,记录当前位以及上一位所填的数,当前是否前面为前导零, ...

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

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

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

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

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

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

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

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

  7. BZOJ1026 [SCOI2009]windy数 数位dp

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

  8. AcWing1083. Windy数(数位DP)题解

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

  9. WINDY数----数位dp

    题目链接:https://ac.nowcoder.com/acm/problem/20268 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数 ...

最新文章

  1. 未转变者怎么重置服务器,未转变者怎么把服务器关掉 | 手游网游页游攻略大全...
  2. 僵尸网络病毒之BotNet扫盲、预防及清除
  3. golang中的优雅中止
  4. Loj 【CQOI 2006】简单题,mmp
  5. antimalware service executable占用内存过高_Win10系统svchost.exe进程占用内存和网速过高的解决方法...
  6. python基础-元组
  7. 多字节与UTF-8、Unicode之间的转换
  8. android beta项目官方页面,安卓7.0开发者预览版如何安装?Android Beta项目正式上线...
  9. Linux用户资源限制-ulimit
  10. asp之ajax技术:responstext中文乱码
  11. 专业英语笔记:Install and Use Python
  12. c语言程序基本设计,C语言程序的设计基本6.ppt
  13. 01 按指定格式读写文件出现乱码
  14. duilib设计器 DuiEditor简易教程 (DuiDesigner) (一)
  15. python逆向切片理解
  16. 红光光浴可以加速血液循环,完全放松身体各个部位的肌肉
  17. 阿里云CDN 使用问题汇总
  18. 03、订单商品信息表.sql
  19. 聚合广告SDK文档(Kotlin)
  20. Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真

热门文章

  1. c语言输入数字输出字母代码,c语言输入数字输出字母代码求解释
  2. 枚举的练习、声明一个枚举类型Status, Status(员工状态),可以限定为4个:空闲(Free),忙(Busy),休假(Vocation),离职(Left)
  3. C语言学习笔记08-函数、变量作用域{}
  4. mac浏览器Brave软件特点分享
  5. Cesium中billboard广告牌使用PinBuilder创建的自定义样式地图图钉
  6. 信号与系统(Python) 学习笔记摘录 (2) 傅里叶 Fourier
  7. 【转载】徐汉彬:PHP7和HHVM的性能之争
  8. Python数据分析师训练营全套课程
  9. PHP 微信 扫码登录 pc网站
  10. 浙大版《C语言程序设计实验与习题指导(第4版)》题目集 实验10-1 圆形体体积计算器