Time Limit: 1 Sec
Memory Limit: 162 MB

Description

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

Input

包含两个整数,A B。

Output

一个整数

HINT

100%的数据,满足 1 <= A <= B <= 2000000000 。


题目分析

dp[i][j]dp[i][j]dp[i][j]表示处理到第iii位,且第i+1i+1i+1位为jjj的满足条件的数字个数

//st表示上一位的填的数码,pre表示上一位填的是否为限制的最大数字
int DP(int len,int st,int pre,int judge)//judge表示上一位是否属于前导0(即从最高位到上一位是否全是0)
{if(len==0) return 1;if(!pre&&!judge&&dp[len][st]!=-1) return dp[len][st];int res=0,mx=pre?dig[len]:9;for(int i=0;i<=mx;++i){if(abs(i-st)<2) continue;res+=DP(len-1,(i==0&&judge)?-666:i,pre&&i==mx,judge&&i==0);//若(i==0$$judge)==1,那么下一位可以填任意一个数码,置为一个极小数可以忽略差值<2的判断//(judge&&i==0)==1说明从最高位到当前位都是0(即这一位也算前导0)}if(!pre&&!judge) dp[len][st]=res;return res;
}int solve(int x)
{int len=0;while(x){dig[++len]=x%10;x/=10;}return DP(len,-666,1,1);
}

完整代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;int read()
{int f=1,x=0;char ss=getchar();while(ss<'0'||ss>'9'){if(ss=='-')f=-1;ss=getchar();}while(ss>='0'&&ss<='9'){x=x*10+ss-'0';ss=getchar();}return f*x;
}const int maxn=50;
int A,B;
int dp[maxn][11],dig[maxn];int DP(int len,int st,int pre,int judge)
{if(len==0) return 1;if(!pre&&!judge&&dp[len][st]!=-1) return dp[len][st];int res=0,mx=pre?dig[len]:9;for(int i=0;i<=mx;++i){if(abs(i-st)<2) continue;res+=DP(len-1,(i==0&&judge)?-666:i,pre&&i==mx,judge&&i==0);}if(!pre&&!judge) dp[len][st]=res;return res;
}int solve(int x)
{int len=0;while(x){dig[++len]=x%10;x/=10;}return DP(len,-666,1,1);
}int main()
{A=read();B=read();memset(dp,-1,sizeof(dp));printf("%d",solve(B)-solve(A-1));return 0;
}

BZOJ1026 || 洛谷P2657 [SCOI2009]windy数【数位DP】相关推荐

  1. 洛谷 P2657 [SCOI2009] windy数 数位DP

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...

  2. 洛谷P2657 [SCOI2009]windy数

    洛谷P2657 [SCOI2009]windy数 本题是一道数位DP 看程序应该能看懂 中心思想:把一个数拆成每一位来处理 代码: #include<bits/stdc++.h> usin ...

  3. 数位dp入门题 洛谷P2657 [SCOI2009] windy 数

    题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...

  4. 洛谷 P2657 [SCOI2009] windy 数 (题解+代码)

    题目传送门:https://www.luogu.com.cn/problem/P2657 题解: 数位dp 计算给定数字所有数位上的值 然后从高位到低位暴力枚举所有的情况 当前一个位置上限时,当前最大 ...

  5. 题解 BZOJ1026 luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

  6. P2657 [SCOI2009]windy数(数位dp)

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

  7. P2657 [SCOI2009]windy数 数位dp入门

    参考了题解,理解仍然还不够透彻 #include<bits/stdc++.h> using namespace std; const int N=550; const int maxn=1 ...

  8. BZOJ1026 [SCOI2009]windy数 数位dp

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

  9. 【bzoj1026】[SCOI2009]windy数 数位dp

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

最新文章

  1. oauth password模式_史上最干的Oauth案例分析
  2. 蓝桥杯练习(java):字符串对比
  3. Uncaught SyntaxError - unexpected end of input
  4. html标签转换含义,html标签含义
  5. app mvc框架_Google App Engine上的Spring MVC和REST
  6. Jmail 发送邮件错误
  7. Java编程语言基础 第三章 实现会员信息录入功能
  8. 三星安卓4.2手机微信字体缺陷:“兹崖幽噩弱器朋鹏网品晶磊弼” ttf 字体缺失,安卓 4.2.2 微信 6.5.4...
  9. Q96:PT(1.2.2):球面2D方格纹理(Sphere 2D Checker)
  10. read()/write()的生命旅程之四——第四章:writeback
  11. 【14年浙江省赛 ZOJ 3780】Paint the Grid Again【图转换】
  12. java答题小程序代码_分享一个java技术开发的微信答题小程序仿头脑王者源码
  13. C++实现人机对战围棋(使用Leela Zero权重)-策略
  14. 使用HttpClient通过POST方式发送XML,使用TCP/IP Monitor观察数据
  15. 青藏高原的气候类型及气候特征
  16. 【历史上的今天】10 月 27 日:世界上第一次网络瘫痪;网络广告的诞生;短视频鼻祖 Vine 关闭
  17. 游戏优化利器 | Android GPU Inspector 开放 Beta 测试版
  18. 【完整教程】nginx反向代理wss,实现不修改服务器端websocket代码加密通讯请求
  19. GitHub 上受欢迎的 Android UI Library整理(part_two)
  20. 互联网金融产品实战——安全开发篇

热门文章

  1. SSM项目--资产管理系统
  2. 骁龙778gplus和骁龙870差多少 哪个好
  3. 「职场套路」那些心照不宣的职场套路,工作多年还不知道?
  4. YII Framework学习教程-用YIIC快速创建YII应用之三-2011-11-11
  5. Yii Framework 开发教程(45) Zii组件-Selectable示例
  6. 我的新概念英语第四册
  7. ​可以给证件照换衣服的软件有哪些?教你如何一键换装
  8. 如何用3D流体实现逼真水流效果?
  9. java汉字转换国标码_国标码(GB2312)的自动生成 | 学步园
  10. 操原作业(一)之Ubuntu编译新内核