windy定义了一种windy数。

不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。

windy想知道,在A和B之间,包含A和B,总共同拥有多少个windy数?

Input

包括两个整数。A B。

满足 1 <= A <= B <= 2000000000 。

Output

包括一个整数:闭区间[A,B]上windy数的个数。

Sample Input

1 10

Sample Output

9

状态分析比較简单。须要增加前导0的状态 如01 02 03

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5. #include <string>
  6. #include <algorithm>
  7. #include <queue>
  8. using namespace std;
  9.  
  10. typedef long long ll;
  11. ll dp[20][10];
  12. vector<int> digit;
  13.  
  14. int a,b;
  15. ll dfs(int pos,int statu,int done,int first){
  16. if(pos==-1) return 1;
  17. if(!done && ~dp[pos][statu]&&!first) return dp[pos][statu];
  18. ll res = 0;
  19. int end = done? digit[pos]:9;
  20. if(first){
  21. for(int i = 0; i <= end; i++)
  22. res += dfs(pos-1,i,done&&i==end,i==0);
  23. }
  24. else{
  25. for(int i = 0; i <= end; i++){
  26. if(abs(i-statu)>=2)
  27. res += dfs(pos-1,i,done&&i==end,0);
  28. }
  29. }
  30. if(!done&&!first) dp[pos][statu] = res;
  31. return res;
  32. }
  33.  
  34. ll solve(int num){
  35. memset(dp,-1,sizeof dp);
  36. digit.clear();
  37. while(num){
  38. digit.push_back(num%10);
  39. num /= 10;
  40. }
  41. return dfs(digit.size()-1,0,1,1);
  42. }
  43.  
  44. int main(){
  45. while(cin >> a >> b){
  46. cout<<solve(b)-solve(a-1)<<endl;
  47. }
  48. return 0;
  49. }

UESTC-1307-windy数的更多相关文章

  1. UESTC 1307 WINDY数 (数位DP,基础)

    题意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数.windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路: 就是给连续的两 ...

  2. UESTC 1307 windy数(数位DP)

    题目链接 这其实入门题,不过,我写了好一会,还是一直wa,图样... #include <iostream> #include <cstdio> #include <cs ...

  3. uestc 250 windy数(数位dp)

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

  4. UESTC 250 windy数(数位DP)

    题意:题意:求区间[A,B]之间的,不含前导0,且相邻两数位之间相差至少为2的正整数有多少个. 分析:dp[i][j]表示,长度为i.以j为结尾的表示的个数,再加一个前导0判断即可 #include ...

  5. BZOJ1026: [SCOI2009]windy数[数位DP]

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6346  Solved: 2831[Submit][Sta ...

  6. BZOJ1026: [SCOI2009]windy数

    传送门 md直接wa了78次,身败名裂 没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha). 二分转化枚举思想.首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位 ...

  7. BZOJ 1026 【SCOI2009】 windy数

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

  8. 【BZOJ-1026】windy数 数位DP

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Sta ...

  9. [bzoj 1026]windy数(数位DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...

  10. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

随机推荐

  1. 2017-2018-1 JAVA实验站 冲刺 day04

    2017-2018-1 JAVA实验站 冲刺 day04 各个成员今日完成的任务 小组成员 今日工作 完成进度 张韵琪 写博客.进行工作总结 100% 齐力锋 找背景音乐 100% 张浩林 游戏操作说 ...

  2. [HDU5492]Find a path

    题目大意: 一个n*m的格子,每个格子上都有一个数. 你可以向下或者向右走,从(1,1)走到(n,m),问方差*(n+m-1)最小的路径是哪个? 思路: 方差*(n+m-1)就相当于给格子里每个数乘上 ...

  3. Android消息机制——Handler

      /**android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个MessageQueue(消息队列), * 但是MessageQueue被封装到Looper里 ...

  4. PHP 基础函数(一)数组的键名和值

    array_values($arr);  获取数组的值,键名消失,原数组不变,返回转变后的数组:

  5. Ehcache缓存时间设置

    timeToLiveSeconds和timeToIdleSecondstimeToLiveSeconds=x:缓存自创建日期起至失效时的间隔时间x:timeToIdleSeconds=y:缓存创建以后 ...

  6. 查看linux启动的线程信息

    1.某一进程所有的线程个数.启动时间 ps max -o lstart,lwp,pid,nlwp,cmd|more lstart:     STARTED time the command start ...

  7. Windows UWP开发系列 – RelativePanel

    RelativePanel是在Windows 10 UWP程序中引入的一种新的布局面板,它是通过附加属性设置元素间的位置关系来对实现布局的.一个简单的示例如下: <RelativePanel&g ...

  8. PHP str_pad() 函数

    str_pad() 函数把字符串填充为指定的长度. 进入 详细介绍页面

  9. javascript比较两个时间大小

    //var yourtime=document.getElementById('begin_time').value; var yourtime='2010-12-10 11:12'; yourtim ...

  10. Android之MVC模式

    MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计数据 你可以分别用柱状图.饼图来表示.一种视图模型也 ...