luogu2657

思路

数位dp,记录下上个位置的数,如果当前的数字与上个数字的差值小于2,就不再转移。还是要注意排除前导0。在记忆化的时候,全都是前导0的情况不能记忆化。

代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
int a[100];
ll f[100][11];
int ab(int x) {return x<0?-x:x;
}
int dfs(int pos,int Rea,int limit,int lst) {if(!pos) return Rea;if(f[pos][lst]!=-1&&Rea&&!limit) return f[pos][lst];int up=limit?a[pos]:9;ll ans=0;for(int i=0;i<=up;++i) {if(ab(i-lst)<2&&Rea) continue;ans+=dfs(pos-1,Rea||i,limit&&(i==up),i);}if(!limit&&Rea) f[pos][lst]=ans;return ans;
}
int solve(ll x) {memset(f,-1,sizeof(f));memset(a,0,sizeof(a));while(x) {a[++a[0]]=x%10;x/=10;}return dfs(a[0],0,1,10);
}
int main() {ll x=read(),y=read();
//  cout<<solve(read());cout<<solve(y)-solve(x-1);return 0;
}

转载于:https://www.cnblogs.com/wxyww/p/9764404.html

[luogu2657][windy数]相关推荐

  1. bzoj-1026 windy数

    题意: 定义一种windy数.这个数在十进制下相邻两个数字之差至少为2的正整数: 求区间[A,B]的这样的数的个数: n<=10^9: 题解: 数位乱搞. 首先求区间[A.B]等价于求[1,A- ...

  2. bzoj 1026 windy数

    题目大意: 定义一种windy数:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数 求在A和B之间,包括A和B,总共有多少个windy数 思路: 一眼数位dp 具体见注释 1 #incl ...

  3. luoguP2657 [SCOI2009]windy数

    和诸位巨佬不同,蒟蒻如我,只能想到怎么统计不满足windy数条件的数 就是个爆搜 定义c[i][j][k]表示第i位且前一位为j,k表示是否满足条件 1 #include<bits/stdc++ ...

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

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

  5. uestc 250 windy数(数位dp)

    题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路:数位dp #include<iostream ...

  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. 1026: [SCOI2009]windy数 (按位DP)

    定义windy数:相邻数字的差至少是2的数,例如10不是windy数,而13是windy数.求给定区间中有多少windy数.区间端点范围为 [1, 2000000000] dfs写法 #include ...

  9. BZOJ 1026 [SCOI2009]windy数

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

最新文章

  1. 更轻量的 View Controllers
  2. XamarinAndroid组件教程RecylerView适配器动画动画种类
  3. 用户自定义的标识符的一些注意事项
  4. 电脑svchost进程占用内存
  5. 终于知道PUBWIN2009的数据库用户名与密码已经成功连接
  6. 全链路压测构建高可用应用最佳实践
  7. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)
  8. python网站框架下载_最受欢迎的7款Python开源框架总结,忍不住收藏了~
  9. 小程序加载更多-数据的拼接
  10. 无法在C语言软件里敲字,网页上不能输入文字怎么办
  11. IDL size函数
  12. oracle odac 配置,.Net項目中通過ODAC方式鏈接Oracle數據庫相關配置
  13. 面试官问你的缺点是什么,应该如何回答?
  14. 2019华为软件精英挑战赛总结篇
  15. 数据库中文字段按拼音排序
  16. kafka集群搭建教程(使用自带的zookeeper)
  17. 简单计算器(C 语言实现)
  18. keep-alive:
  19. 复盘--写在秋招之后
  20. 按学号和姓名进行查询c语言,数据库实验4 数据查询(答案)

热门文章

  1. [LeetCode周赛复盘] 第 314 场周赛20221009
  2. android am 拨打电话,adb 之android的神器am
  3. 2019年北京摇号窗口办理地址、电话
  4. 边缘基础设施还差点什么?
  5. C# 简单的前方交会程序设计
  6. Java实现数组列项相加_裂项求和法 - osc_rkun22vq的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. fcitx输入法字体太小解决方案
  8. 微信小程序—查询快递
  9. 计算机屏幕三种,多屏互动的三种表现类型
  10. Kinect for Windows SDK v2.0 开发笔记 (五)骨骼帧与笑面男