题目链接:[SCOI2009] windy 数 - 洛谷

这是一道需要考虑前导0的数位DP题,为什么需要考虑前导0呢?其实原因很简单,因为有条件限制我们相邻两个数的差,所以我们在进行数位DP时必须把前一位的值记录下来,而这个时候我们就需要区分前导0和真实0的区别了,如果前一位是前导0,那么我们当前位可以任选,而不一定非要与前导0差值大于等于2,但是如果前一位的0不是前导0而是真实存在的0,那么我们当前位就不能选0或者1了,这也就是为什么需要考虑前导0的原因,其他就是附上数位DP的模板了,如果还有不懂数位DP的小伙伴可以看下我之前的博客,这里附上博客地址:数位DP模板详解_AC__dream的博客-CSDN博客

下面是代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int N=23;
typedef long long ll;
ll f[N][10],a[N];
ll dp(int pos,int last,int lead,int limit)
{if(!pos) return 1;if(!lead&&!limit&&f[pos][last]!=-1) return f[pos][last];int up=limit?a[pos]:9;ll ans=0;for(int i=0;i<=up;i++){if(lead)ans+=dp(pos-1,i,lead&&(i==0),limit&&(i==up));else {if(abs(i-last)<2) continue;ans+=dp(pos-1,i,lead&&(i==0),limit&&(i==up));}}if(!lead&&!limit) f[pos][last]=ans;return ans;
}
ll solve(ll x)
{if(!x) return 1;int pos=0;while(x){a[++pos]=x%10;x/=10;}return dp(pos,0,1,1);
}
int main()
{ll l,r;cin>>l>>r;memset(f,-1,sizeof f);cout<<solve(r)-solve(l-1);return 0;
}

P2657 [SCOI2009] windy 数(数位DP)相关推荐

  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. 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. 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. 万字长文,值得收藏/参考的OpenCV C++基础代码
  2. Request请求用Cookie记录SessionId
  3. python获取url文件名_python httplib / urllib获取文件名
  4. 【数学和算法】协方差矩阵、方差
  5. CVE-2021-33909:Linux本地权限提升漏洞
  6. Linux 一些基本的操作命令
  7. 合并BN层到卷积层的原理及实验
  8. ora-39142,ora-39001,ora-39000
  9. GIT 牛刀小试 (第一发)
  10. TortoiseSVN2IDE.pas源代码
  11. 【CodeForces - 260C】Balls and Boxes (思维模拟,有坑,时光倒流)
  12. java必知必会_Java构造器必知必会
  13. RocketMQ源码解析-Broker的HA实现
  14. callback 模式
  15. python自学-Python 应该怎么学?
  16. HP增霸卡出现“网络配置错误,请正确配置网卡”的原因
  17. 时区转换问题java编码,Java UTC ZonedDateTime转换成指定时区时间方法及使用示例代码...
  18. defs(defs是什么意思)
  19. html语言开关控制灯泡,用js控制电灯开关
  20. 【报告分享】2021年快手母婴行业数据价值报告-磁力引擎(附下载)

热门文章

  1. app同质化趋势下,如何实现差异化?
  2. Audition CS6 安装到2%出现安装失败
  3. 天堂向左,深圳往右 第十三章第十四章
  4. mysql 时间格式处理
  5. React从零开始搭建项目
  6. 找计算机研究的论文18个平台
  7. 活体检测论文研读五:Face De-Spoofing: Anti-Spoofing via Noise Modeling
  8. java中String和数组的长度
  9. 如何做出一个微信小程序
  10. (转)ubuntu软件列表