洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]
windy数
题目描述
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,
在A和B之间,包括A和B,总共有多少个windy数?
输入输出格式
输入格式:
包含两个整数,A B。
输出格式:
一个整数
输入输出样例
1 10
9
25 50
20
说明
100%的数据,满足 1 <= A <= B <= 2000000000 。
分析:
据大佬说这是一道数位DP模板???我DP不好别骗我QWQ。。。
好吧,一开始打了个暴搜看能水多少,可能我写挂了只拿10分QAQ???然后打了一下正解记忆化搜索,貌似真是一个数位DP模板???看来还是我太菜了。。。
这道题需要注意的就是当前搜索的情况如果是前导零或者顶端情况的时候需要特判,所以在搜索的时候加入两个bool变量判断一下,剩下的貌似真就是一个模板了。。。
Code:
//It is made by HolseLee on 22rd July 2018
//Luogu.org P2657
#include<bits/stdc++.h>
using namespace std;
int num[],dp[][];
inline int read()
{
char ch=getchar();int num=;
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<=''){
num=num*+ch-'';ch=getchar();}
return num;
}
inline int Abs(int x)
{
return x>?x:-x;
}
inline int dfs(int len,int las,bool top,bool zero)
{
if(len==)return ;
if(!top&&!zero&&dp[len][las]!=-)
return dp[len][las];
int cnt=,maxx=(top?num[len]:);
for(int i=;i<=maxx;i++){
if(Abs(i-las)<)continue;
int p=i;if(zero&&i==)p=-;
cnt+=dfs(len-,p,top&&(i==maxx),(p==-));
}
if(!zero&&!top)dp[len][las]=cnt;
return cnt;
}
inline int work(int x)
{
int tot=;
while(x){num[++tot]=x%;x/=;}
memset(dp,-,sizeof(dp));
return dfs(tot,-,true,true);
}
int main()
{
int x=read();int y=read();
printf("%d",work(y)-work(x-));
return ;
}
洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]的更多相关文章
- luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索
题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...
- 洛谷 P2657 [SCOI2009]windy数 解题报告
P2657 [SCOI2009]windy数 题目描述 \(\tt{windy}\)定义了一种\(\tt{windy}\)数.不含前导零且相邻两个数字之差至少为\(2\)的正整数被称为\(\tt{wi ...
- 洛谷——P2657 [SCOI2009]windy数
P2657 [SCOI2009]windy数 题目大意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和 ...
- C++ 洛谷 P2657 [SCOI2009]windy数 题解
P2657 [SCOI2009]windy数 同步数位DP 这题还是很简单的啦(差点没做出来 个位打表大佬请离开(包括记搜),我这里讲的是DP!!! 首先Cal(b+1)-Cal(a),大家都懂吧(算 ...
- 1026-windy数+数位DP+记忆化搜索
1026: [SCOI2009]windy数 题意:数位DP模板题: 目前只理解了记忆化搜索,就想练练手, ------给递推写法留一个位子 ------ 注意这道题要判断前导0的情况,1 )可以加一 ...
- 洛谷P2657 [SCOI2009]windy数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P2657 题目大意:找区间 \([A,B]\) 范围内 不含前导零 且 相邻两个数字之差至少为2 的正整数的个数. 题目分 ...
- P2657 [SCOI2009]windy数 数位dp
数位dp之前完全没接触过,所以NOIP之前搞一下.数位dp就是一种dp,emm……用来求解区间[L,R]内满足某个性质的数的个数,且这个性质与数的大小无关. 在这道题中,dp[i][j]代表考虑了i位 ...
- 题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP
BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...
- [洛谷P2657][SCOI2009]windy数
题目大意:不含前导零且相邻两个数字之差至少为$2$的正整数被称为$windy$数.问$[A, B]$内有多少个$windy$数? 题解:$f_{i, j}$表示数有$i$位,最高位为$j$(可能为$0 ...
随机推荐
- JVM调优总结(2):基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...
- GridControl详解(九)表格中的控件
选择完成控件后,可用+号点开ColumnEdit列,改控件的类型是RepositoryItem类型的,其相应的属性和相应的控件属性是类似的 构建数据如下: DataTable dt = new Dat ...
- spring bean初始化及销毁你必须要掌握的回调方法
spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作. 初始化的时候实现的方法 1.通过java提供的@PostConstruct注解: 2.通过实现spring提供的Initi ...
- python 版本zabbix_sender
python版本的zabbix_sender: 使用方法: 1.导入 : from zbx_send import info 2.实例化: test=info() 3.支持 ...
- python模块之imghdr检测图片类型
1. imghdr是什么 imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流. 能够支持的图片格式: 2. 如何使用 提供了一个api叫做imghdr.what ...
- Vue笔记之props验证
使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> ...
- 巅峰极客CTF writeup[上]
经验教训 1.CTF不比实战,最好不要死磕.死磕就输了.我就是死磕在缓存文件死的.真的惭愧: 2.对于flag的位置不要太局限于web目录下,如果是命令执行直接上find / -name flag*: ...
- 5-python的封装与结构 - set集合
目录 1 封装与解构 1.1 封装 1.2 解构 1.3 Python3的解构 2 set类型 2.1 set的定义 2.2 set的基本操作 2.2.1 增加元素 2.2.2 删除元素 2.2.3 ...
- 安装ssh-keygen
转载自:http://www.daoan.com/forums/index.php?forumid=5&mods=topicdisplay&postid=4 sudo apt-get ...
- Error -27796: Failed to connect to server "ip地址": [10060] Connection timed out
如果出现Error -27796: Failed to connect to server "ip地址": [10060] Connection timed out 这样的错误,如 ...