题目:

Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。

Windy 想知道,在 AB 之间,包括 AB,总共有多少个 Windy 数?

思路:

f[i][j]f[i][j]f[i][j] 代表有i位数,最高位为j的Windy数的个数。
f[i][j]=∑f[i−1][k],0≤k≤9f[i][j] = \sum{f[i-1][k]},0≤k≤9f[i][j]=∑f[i−1][k],0≤k≤9,因为位数少了1,所以最高位k无论是什么,少一位的数总比多一位的数小

对每一位数分析,当前位的数x在0到x之间时,满足相邻位的数之差大于等于2,就加上计算出的结果f[i+1][j]f[i+1][j]f[i+1][j]因为当前数到最后一位数共有i+1位数

  • 注意特判第一位,因为不能有前导零,第一位从1开始
  • 最后再单独算上前导零的情况位数小于给出数的位数,最高位从1到9,那就一定存在前导零

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 35;
int f[N][N];void init()
{for(int i=0;i<=9;i++) f[1][i]=1;for(int i=2;i<N;i++)for(int j=0;j<=9;j++)for(int k=0;k<=9;k++)if(abs(k-j)>=2)f[i][j] += f[i-1][k];
}int dp(int n)
{if(!n) return 0;vector<int>nums;while(n) nums.push_back(n%10),n/=10;int last = -2;int res = 0;for(int i=nums.size()-1;i>=0;i--){int x = nums[i];for(int j=i==nums.size()-1;j<x;j++)if(abs(j-last)>=2)res += f[i+1][j];if(abs(x-last)>=2) last = x;else break;if(!i) res ++;}//前导零的情况for(int i=1;i<nums.size();i++)for(int j=1;j<=9;j++)res += f[i][j];return res;
}
int main()
{init();int l,r;cin>>l>>r;cout<<dp(r)-dp(l-1)<<'\n';return 0;}

Windy数 数位DP相关推荐

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

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

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

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

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

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

  4. BZOJ1026 [SCOI2009]windy数 数位dp

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

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

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

  6. WINDY数----数位dp

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

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

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

  8. 洛谷P2657 windy 数 数位dp

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

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

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

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

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

最新文章

  1. Cannot open precompiled header file:'Debug/password.pch' No such file or directory
  2. 10.Java设计模式 工厂模式,单例模式
  3. 新闻发布项目——接口类(categoryTBDao)
  4. linux远程执行迷路,linux操作系统基础
  5. ?php echo $this-_里面怎么加入图片地址,PHP如何获取图片同时展现在页面上?
  6. 网友希望一加7像iPhone XR一样流畅 刘作虎:iPhone很卡
  7. Mask Network与Conflux发起联合Bounty
  8. 精心收集的jQuery常用的插件1000
  9. post 图片 byte 如何展示_图片展示:道路排水工程如何进行标准化施工
  10. Excel中常用技巧
  11. 太原师范学院计算机考研率,太原师范学院怎么样(太原师范学院考研率)
  12. 求不定积分的几种方法
  13. 锐龙9 7845HX 和锐龙9 6900HX选哪个 r9 7845HX 和6900HX差距
  14. Unity 3D 游戏与编程
  15. 好用的Linux数据库管理工具推荐!
  16. P1772 [ZJOI2006]物流运输(线性dp+最短路径)
  17. Top01-0010、img标签的属性
  18. 移植 SOEM 到嵌入式平台 STM32F767
  19. 【财务数字化管理】金蝶ERP系统助力企业数字化转型
  20. 用ALSA驱动声卡流程详解

热门文章

  1. Rect Transform
  2. Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog
  3. CSDN竞赛6期题解
  4. 一作发表8篇SCI,这位双一流高校博士生是怎么做到的?
  5. 微软project服务器搭建,安装和配置 Project Server 2010
  6. 2004年南京美食地图 [转载]
  7. java实现table斜线,诸位大神 ,怎样在table的 td中添加 一条斜线
  8. 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
  9. (附源码)springboot家庭财务分析系统 毕业设计 641323
  10. 分类算法-决策树、随机森林