题目链接:BZOJ - 1026

题目分析

这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题..

对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a-1] 的答案。这样就化繁为简了。

具体过程见代码中的注释。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;const int MaxBit = 13;int A, B;
int f[MaxBit][11], Bit[MaxBit];inline int Abs(int a) {return a >= 0 ? a : -a;
}//计算小于x的数的答案
int Get(int x) {if (x == 0) return 0;int ret = 0, l = 0;while (x) {Bit[++l] = x % 10;x /= 10;}//统计位数不足l位的答案 for (int i = 1; i <= l - 1; ++i) {for (int j = 1; j <= 9; ++j) {ret += f[i][j];}}//最高位可以在[1, Bit[l]-1]之间变化 for (int i = 1; i <= Bit[l] - 1; ++i) ret += f[l][i];//固定后面的(l-i)位,然后第i位可以在[0, Bit[i]-1]之间变化 for (int i = l - 1; i >= 1; --i) {for (int j = 0; j <= Bit[i] - 1; ++j) {if (Abs(j - Bit[i + 1]) >= 2) ret += f[i][j];}//无法固定第i位 if (Abs(Bit[i + 1] - Bit[i]) < 2) break;}return ret;
}int main()
{//f[i][j]表示第i位是j的答案数 for (int i = 0; i <= 9; ++i) f[1][i] = 1;for (int i = 1; i <= 10; ++i) {for (int j = 0; j <= 9; ++j) {for (int k = 0; k <= 9; ++k) {if (Abs(k - j) >= 2) f[i][j] += f[i - 1][k];}}}scanf("%d%d", &A, &B);//对询问进行差分,化繁为简 printf("%d\n", Get(B + 1) - Get(A));return 0;
}

  

转载于:https://www.cnblogs.com/JoeFan/p/4231594.html

[BZOJ 1026] [SCOI 2009] Windy数 【数位DP】相关推荐

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

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

  2. bzoj 1026: [SCOI2009]windy数 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

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

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

  4. BZOJ1026 [SCOI2009]windy数 数位dp

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

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

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

  6. AcWing1083. Windy数(数位DP)题解

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

  7. WINDY数----数位dp

    题目链接:https://ac.nowcoder.com/acm/problem/20268 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数 ...

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

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

  9. 洛谷P2657 windy 数 数位dp

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

最新文章

  1. C/C++语言中计算int,float,double,char四种数据类型所能表示的数据范围
  2. 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
  3. mysql8.0.15调优_Mysql 8.0 参数调优
  4. 薅羊毛 Colab使用外部数据的7种方法!
  5. Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持
  6. 20155301 Exp4 恶意代码分析
  7. Flask框架(一)
  8. FAQ系列 | mysqldump选项之skip-opt
  9. Cocos2d-x学习笔记(17)(TestCpp源代码分析-1)
  10. 2020字节跳动数据库面试题及答案
  11. 【学术】 一个博士的经历(小木虫精华帖,留着细细体会!)
  12. python的help函数如何使用
  13. Holy Grail【spfa签到题】
  14. php微信调用天气api,微信公众号接口开发--snoweek测试
  15. Android界面开发基础
  16. 地理生物结业考_地理、生物结业主要考什么?
  17. m4s格式,多线程爬B站视频
  18. NavicatPremium写的MySQL文件去哪?
  19. 教你从零做起谷歌Adsense。开户,过审核,过pin码达到稳定收益
  20. Linux文件和目录管理(2)

热门文章

  1. Java 习题(面向对象)
  2. android surfaceflinger 代码,android surfaceflinger测试程序
  3. java创建的zip没写入权限,java中的zip创建错误
  4. oracle中那个日期怎么相减_oracle数据库中日期加减函数
  5. 澄海口袋机器人_汕头市澄海区在2019年汕头市中小学智能机器人竞赛上取得优异成绩...
  6. 针对标签属性data-**的使用
  7. java的方法调用中分不清_java中不太清晰的知识点
  8. 编程题【Math类】计算类
  9. 怎样在数组末尾添加数据_如何利用C++实现可变长的数组?
  10. Linux(12)-命令行的使用,shell脚本