@(BZOJ)[数位DP]

题面

Description

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

Input

包含两个整数,A B。

Output

一个整数

Sample Input

【输入样例一】

1 10

【输入样例二】

25 50

Sample Output

【输出样例一】

9

【输出样例二】

20

HINT

【数据规模和约定】
100%的数据,满足 1 <= A <= B <= 2000000000 。

Solution

我们记f[i][j][k = 0 或 1]表示从\(0\)到总共有\(i\)位且最高位为\(j\)的数中, 有多少个Windy数. \(k\)表示是否存在前导0. 记忆化搜索即可.

#include <cstdio>
#include <cstring>
#include <algorithm>int f[10][10][2], dgt[10];int DFS(int pos, int cur, bool bnd, bool flg)
{   if(! pos)return 1;int res = 0;if(! bnd){if(~ f[pos][cur][flg])return f[pos][cur][flg];for(int i = 0; i < 10; ++ i)if(! flg || abs(cur - i) >= 2)res += DFS(pos - 1, i, 0, flg || (bool)i);  return f[pos][cur][flg] = res;} for(int i = 0; i < dgt[pos - 1]; ++ i)if(abs(cur - i) >= 2)res += DFS(pos - 1, i, 0, 1);if(abs(cur - dgt[pos - 1]) >= 2)res += DFS(pos - 1, dgt[pos - 1], 1, 1);return res;
}inline int calculate(int a)
{if(! a)return 1;int cnt = 0;for(; a; dgt[cnt ++] = a % 10, a /= 10);int res = 0;for(int i = 0; i < dgt[cnt - 1]; ++ i)res += DFS(cnt - 1, i,  0, (bool)i);return res += DFS(cnt - 1, dgt[cnt - 1], 1, 1);
}int main()
{#ifndef ONLINE_JUDGEfreopen("BZOJ1026.in", "r", stdin);freopen("BZOJ1026.out", "w", stdout);#endif int a, b;scanf("%d%d", &a, &b);memset(f, -1, sizeof(f));printf("%d\n", calculate(b) - calculate(a - 1));
}

转载于:https://www.cnblogs.com/ZeonfaiHo/p/6773528.html

BZOJ1026[SCOI2009]windy数相关推荐

  1. BZOJ1026 [SCOI2009]windy数 数位dp

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

  2. [BZOJ1026] [SCOI2009] windy数 (数位dp)

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

  3. [bzoj1026] [SCOI2009]windy数

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

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

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

  5. BZOJ 1026 [SCOI2009]windy数

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

  6. bzoj:1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7982  Solved: 3593 Descriptio ...

  7. P2657 [SCOI2009]windy数

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

  8. bzoj 1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7688  Solved: 3470 [Submit][S ...

  9. [SCOI2009]windy数

    [SCOI2009]windy数 BZOJ luogu 数位dp入门题 复杂度:\(O(11×10×10)\) 详细见注释 #define ll long long #include<bits/ ...

最新文章

  1. 离职交接文档_如何写好离职工作交接文档?
  2. mooc服务器返回数据为空,服务返回的json数据过大,nginx无法返回给client
  3. 海尔智家股市被看好,增长逻辑令人深思
  4. linux Fedora35 grub2 改变启动顺序
  5. 2012.4.13总结(一)
  6. 想跟大家一起做件小事
  7. 【事件驱动】【数码管识别】一(数码管检测(矩形检测函数解读))
  8. eclipse重定向输入输出到文件
  9. ESXi6.7修改静态ip地址
  10. 爬取豆瓣短评之《后来的我们》-------后来的我们没有故事
  11. 如何在html中加入背景,html中如何加入背景图片
  12. 毒蘑菇导航,感觉不像是毒蘑菇,更像是个树莓了。
  13. python基础-异常处理try-except
  14. 子组件调用父组件中方法的方法
  15. 雨听 | 网页数据修改
  16. Unity Shader-遮挡处理(X-Ray,遮挡描边,遮挡半透,遮挡溶解)
  17. 【SQL Server 上机实验题 】
  18. C#索引器-索引器和属性的区别
  19. 现代统计学与SAS应用——中英文对照词汇表
  20. Handler消息机制详解

热门文章

  1. Mac OS X 下 TAR.GZ 方式安装 MySQL5.6
  2. 用Python写一个简单的监控系统
  3. 如何手动删除并重新安装 .NET Framework 2.0
  4. sqlite like通配符使用 -转
  5. 多线程之终止线程的四种方法
  6. 使用Dev-C++查看vector数组中的变量值
  7. 【软件测试】软件测试的基本流程(一般步骤)
  8. 推荐 7 个超棒的监控工具
  9. python-requests数据驱动延伸
  10. SEO学习步骤--SEO入门第一章