BZOJ1026[SCOI2009]windy数
@(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数相关推荐
- BZOJ1026 [SCOI2009]windy数 数位dp
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1026 题目概括 求区间[A,B]中有多少数满足下面的条件. 条件:该数相邻两位之差不小于2. 题解 ...
- [BZOJ1026] [SCOI2009] windy数 (数位dp)
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- [bzoj1026] [SCOI2009]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- BZOJ1026: [SCOI2009]windy数(数位dp)
题意 题目链接 Sol 很zz的数位dp $f[i][j]$表示第$i$位,前一位是$j$的方案数 转移的时候枚举一下是否相同即可 注意当lim达到上界的时候是不能记忆化的! /**/ #includ ...
- BZOJ 1026 [SCOI2009]windy数
1026: [SCOI2009]windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间 ...
- bzoj:1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7982 Solved: 3593 Descriptio ...
- P2657 [SCOI2009]windy数
P2657 [SCOI2009]windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B ...
- bzoj 1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7688 Solved: 3470 [Submit][S ...
- [SCOI2009]windy数
[SCOI2009]windy数 BZOJ luogu 数位dp入门题 复杂度:\(O(11×10×10)\) 详细见注释 #define ll long long #include<bits/ ...
最新文章
- 离职交接文档_如何写好离职工作交接文档?
- mooc服务器返回数据为空,服务返回的json数据过大,nginx无法返回给client
- 海尔智家股市被看好,增长逻辑令人深思
- linux Fedora35 grub2 改变启动顺序
- 2012.4.13总结(一)
- 想跟大家一起做件小事
- 【事件驱动】【数码管识别】一(数码管检测(矩形检测函数解读))
- eclipse重定向输入输出到文件
- ESXi6.7修改静态ip地址
- 爬取豆瓣短评之《后来的我们》-------后来的我们没有故事
- 如何在html中加入背景,html中如何加入背景图片
- 毒蘑菇导航,感觉不像是毒蘑菇,更像是个树莓了。
- python基础-异常处理try-except
- 子组件调用父组件中方法的方法
- 雨听 | 网页数据修改
- Unity Shader-遮挡处理(X-Ray,遮挡描边,遮挡半透,遮挡溶解)
- 【SQL Server 上机实验题 】
- C#索引器-索引器和属性的区别
- 现代统计学与SAS应用——中英文对照词汇表
- Handler消息机制详解