传送门

【题目分析】

数位DP经典题了。

考虑直接统计R内的windy数和L-1内的windy数,两者相减即为L~R之间的windy数。

考虑DP,记录当前位以及上一位所填的数,当前是否前面为前导零,以及前面一段是否与原数相同。

然后按题意逐位计算即可。

然后就会惊讶的发现TLE了。。。。。。

所以考虑优化:如果当前没有受任何限制,那么可以直接记录下当前位置的值,记忆化搜索。

【代码~】

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN=15;LL l,r;
int num[MAXN],cnt;
int dp[MAXN][MAXN];LL Read(){LL i=0,f=1;char c;for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar();for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';return i*f;
}int DP(int pos,int last,int iszero,int limit){if(pos==0)return !iszero;if(!iszero&&!limit&&dp[pos][last]!=-1)return dp[pos][last];int sx=limit?num[pos]:9,ret=0;for(int i=0;i<=sx;++i){int delta=abs(i-last);if(!iszero){if(delta>=2){ret+=DP(pos-1,i,iszero,limit&&i==num[pos]);}}else{ret+=DP(pos-1,i,i==0,limit&&i==num[pos]);}}if(!iszero&&!limit)return dp[pos][last]=ret;return ret;
}int solve(int x){cnt=0;while(x){num[++cnt]=x%10;x/=10;}return DP(cnt,0,1,1);
}int main(){memset(dp,-1,sizeof(dp));l=Read(),r=Read();cout<<solve(r)-solve(l-1);return 0;
}

转载于:https://www.cnblogs.com/Ishtar/p/10010708.html

洛谷2657 windy数(数位DP)相关推荐

  1. 洛谷P2657 windy 数 数位dp

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

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

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

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

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

  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. 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. BZOJ1026: [SCOI2009]windy数(数位dp)

    题意 题目链接 Sol 很zz的数位dp $f[i][j]$表示第$i$位,前一位是$j$的方案数 转移的时候枚举一下是否相同即可 注意当lim达到上界的时候是不能记忆化的! /**/ #includ ...

最新文章

  1. Ubuntu 基本概念之美元号的意义
  2. python与excel结合能做什么-Python网络爬虫与文本数据分析
  3. iOS组件化方案的几种实现
  4. Linux下安装MySQL5.6
  5. Apache Flink OLAP引擎性能优化及应用
  6. rbenv mysql_mysql-无法在macOS Si上安装mysql2 gem
  7. 一条mysql语句判断是添加还是修改
  8. fms安装教程 linux_安装FMS3 for Linux
  9. 江西省九江市瑞昌市高考成绩查询2021,2021江西省地区高考成绩排名查询,江西省高考各高中成绩喜报榜单...
  10. 以图搜图-自动生成图模式匹配Cypher
  11. 镜子里的百度是什么样子?
  12. Modbus设备通过边缘网关接入阿里云IoT平台
  13. 网站域名空间服务器,网站 域名 空间 服务器
  14. typescript工程_使用TypeScript构建游戏。 工程图网格2/5
  15. 89元尝鲜智能家居 天猫精灵方糖智联3件套简评
  16. mysql server安装及配置
  17. 优秀的工程师是怎样炼成的
  18. js 时间戳和时间的处理
  19. RN终止所有节点进程并启动npm服务器命令
  20. 2万元小投资冷门暴利行业有哪些?投资什么利润大?

热门文章

  1. bzoj 4337 树的同构
  2. 一、app更新提示后台接口开发-(2)数据库表设计
  3. MYSQL IFNULL函数的使用
  4. C# - 接口,继承
  5. 关于网络编程中MTU、TCP、UDP优化配置的一些总结
  6. 【零基础学Java】—throw关键字(四十六)
  7. 大学生必须要知道的毕业设计基本流程
  8. JavaScript学习(八)—属性节点和属性值的操作
  9. SQL73 考试分数(二)
  10. 为什么在加油站上班,一个月休3天,工资2000元,却有人干?