满足一下条件的数字称为windy数

不考虑前导0,所有相邻的两个数字的差至少为2。

求出任意区间内的所有windy数

思路:dp[i][j]表示所有长度为 i 的数字以 j 开头的windy数的个数。0<=j<=9

仔细考虑前导0 的影响,已注释在代码中

#include<iostream>
#include<cstring>
#include<cstdio>
#define bug
using namespace std;
const int MAXN = 20;
template<typename T>
T oabs(T a){return a<0?-a:a;}
int dp[MAXN][10];
//dp[i][j] 表示长度为i的所有数字以j开头的windy数字的个数
int a,b;
bool init()
{if(scanf("%d%d",&a,&b)==EOF)return false;return true;
}
void DP_init()
{memset(dp,0,sizeof(dp));int tar = 0;for(int i=0;i<10;i++)dp[1][i]=1;for(int i=2;i<MAXN;i++){//如果前导为0,可以看做这一位不存在,加上后一位所有的数字开头的windy数个数for(int j=0;j<10;j++)dp[i][0]+=dp[i-1][j];for(int j=1;j<10;j++){tar = j+2;if(tar<10){for(int k=tar;k<10;k++)dp[i][j]+=dp[i-1][k];}tar=j-2;if(tar>=0){for(int k=tar;k>=0;k--){dp[i][j]+=dp[i-1][k];if(k==0){//此时由于前一位不为0,所以此时的前导0不可以当做0这一位不存在,所以减去多加上两个数//表示这个trick找了好久,T_Tdp[i][j]-=dp[i-2][0]+dp[i-2][1];}}}}}
}
int num[MAXN],len;
int solve(int n)
{len = 1;while(n){num[len++]=n%10;n/=10;}num[len]=20;len--;int res =0;for(int i=len;i;i--){for(int j =0;j<num[i];j++){if(oabs(num[i+1]-j)<2)continue;res+=dp[i][j];if(j==0&&i!=len){res-=dp[i-1][0]+dp[i-1][1];}}  if(oabs(num[i]-num[i+1])<2)break;}return res;
}
int main()
{DP_init();while(init()){printf("%d\n",solve(b+1)-solve(a));}return 0;
}

数位DP --Windy数相关推荐

  1. Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献

    传送门 文章目录 题意: 思路: 题意: 定义S(k)S(k)S(k)为将kkk的每一位拿出来从小到大排序后构成的数,比如S(3421)=1234S(3421)=1234S(3421)=1234,求S ...

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

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

  3. uestc 250 windy数(数位dp)

    题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路:数位dp #include<iostream ...

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

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

  5. BZOJ1026 [SCOI2009]windy数 数位dp

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

  6. 【BZOJ1026】windy数,数位DP

    Time:2016.08.14 Author:xiaoyimi 转载注明出处谢谢 思路: 依旧蛋疼的数位DP f[i][j]表示有i位,且最高位为j的windy数个数 转移方程比较好写 关键是具体求值 ...

  7. 洛谷2657 windy数(数位DP)

    传送门 [题目分析] 数位DP经典题了. 考虑直接统计R内的windy数和L-1内的windy数,两者相减即为L~R之间的windy数. 考虑DP,记录当前位以及上一位所填的数,当前是否前面为前导零, ...

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

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

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

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

最新文章

  1. 树莓派修改密码(有单独屏幕)
  2. 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
  3. 一个完整的iOS开发框架(Frameworks)-NimbusKit
  4. python小程序源代码-Python小项目:开发一个动态时钟小程序(附源码)
  5. SAAS,象B2C那样的B2B分销系统
  6. TypeScript constructor signature 类型的变量赋值方式
  7. HTTP1.1中CHUNKED编码解析(转载)
  8. PyTorch载入图片后ToTensor解读(含PIL和OpenCV读取图片对比)
  9. SpringBoot中的异步操作与线程池
  10. photon 服务器操作系统,photon 云服务器
  11. 在springBoot项目中使用activiti
  12. (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
  13. Process Simulate
  14. win10 桌面背景最短切换时间由1分钟改为10秒
  15. angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
  16. 由于应用universal link 校验不通过 ios应用升级SDK 更换Universal Links校验
  17. 东南大学计算机技术935专业考研经验分享
  18. 显示thread 1:signal SIGABRT 错误
  19. AI研习丨专题:面向防疫的5G巡检机器人技术与应用
  20. FreeMind:简单粗暴完成一份思维导图

热门文章

  1. 如何静下心做些事情呢
  2. c语言一般用大写字母定义什么,c语言程序格式是什么
  3. AjaxPro.dll 下载及使用
  4. 十六进制与rgb颜色转换
  5. 拯救者15isk加装固态硬盘
  6. 油溶性InP/ZnS高亮绿光和红光PL490nm-750nm
  7. 寒武纪科技 服务器芯片,国内首款人工智能服务器诞生!搭载“寒武纪”芯片,走在世界前列...
  8. 使用canvas 代码画小猪佩奇
  9. 01-Docker-介绍与安装(CentOS)
  10. Linux下如何查看硬盘是固态硬盘SSD还是机械硬盘HDD