当前位置: 首页 > news >正文

AcWing 1083:Windy数 ← 数位DP

【题目来源】
https://www.acwing.com/problem/content/1085/

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

【输入格式】
共一行,包含两个整数 A 和 B。

【输出格式】
输出一个整数,表示答案。

【输入样例】
25 50

【输出样例】
20

【数据范围】
1≤A≤B≤2×10^9

【算法分析】
● 数位DP(Digit Dynamic Programming)是一种用于解决数字数位相关计数问题的动态规划算法。其核心思想是将数字按位拆解,通过递归或递推的方式处理每一位的选择,并利用记忆化搜索来避免重复计算,从而高效统计满足特定条件的数字数量。

● 数位DP通过记录前导零、数位限制等状态,将问题复杂度从 O(n) 降低到 O(log n),能够处理非常大的数字范围(如 10^18)。其实现通常是将统计 [le, ri] 的问题转化为统计 [1, ri] 和 [1, le-1] 的结果相减。

● 数位DP题型的特点:求某个区间 [le, ri] 内,满足某种性质的数的个数。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=12;
int f[N][N]; //f[i][j]表示共有i位且最高位是数字j的windy数的个数void init() {for(int i=0; i<=9; i++) f[1][i]=1;for(int i=2; i<N; 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];
}int dp(int n) {if(n==0) return 0;vector<int> v;while(n) {v.push_back(n%10);n/=10;}int cnt=0,pre=-1;for(int i=v.size()-1; i>=0; i--) {int x=v[i];for(int j=0; j<x; j++) {if(abs(j-pre)>=2) cnt+=f[i+1][j];}if(abs(x-pre)<2) break;pre=x;if(i==0) cnt++;}for(int i=1; i<v.size(); i++)for(int j=1; j<=9; j++)cnt+=f[i][j];return cnt;
}int main() {init();int le,ri;cin>>le>>ri;cout<<dp(ri)-dp(le-1);return 0;
}/*
in:25 50
out:20
*/





【参考文献】
https://www.acwing.com/solution/content/195605/
https://www.bilibili.com/video/BV1fy4y1q79f
https://www.bilibili.com/video/BV1Ff4y1e7YW/
https://blog.csdn.net/hnjzsyjyj/article/details/155972543
https://blog.csdn.net/hnjzsyjyj/article/details/108507656

 

http://www.jsqmd.com/news/108763/

相关文章:

  • 终极指南:Kea DHCP如何重塑现代网络自动化架构
  • LosslessCut字幕处理终极指南:从零基础到精通字幕管理
  • NTFS-3G终极指南:在Linux系统上轻松读写Windows硬盘的完整教程
  • BetterNCM Installer:免费快速的网易云音乐插件管理完整方案
  • 网络自动化实战:Kea DHCP高效部署与性能优化指南
  • 终极对决:Maple Mono vs JetBrains Mono,哪个才是你的编程伴侣?
  • Windows 11任务栏自定义工具Taskbar11:打造个性化工作空间
  • 终极指南:5步轻松掌握Typora插件开发全流程
  • BOTW存档编辑器GUI深度攻略:海拉鲁冒险自定义指南
  • BOTW存档编辑器GUI完整使用指南:轻松定制你的海拉鲁冒险
  • 革命性AI绘图工具:SD-WebUI模型下载器重塑创作体验
  • Kotaemon如何避免重复检索造成的资源浪费?
  • 2025新手买钓鱼竿必看:超轻超硬手竿推荐,品牌选购不迷茫 - 品牌2026
  • HandheldCompanion终极配置指南:Windows掌机优化简单上手
  • 解锁macOS效率新境界:开源应用完全指南
  • FGO自动化工具终极指南:5步轻松解放双手,效率提升300%
  • 2025年靠谱的圆柱钢模板信誉优质供应参考(可靠) - 行业平台推荐
  • 电商场景下的智能导购:Kotaemon实战应用分享
  • Mermaid在线编辑器:零基础快速上手的技术图表制作神器
  • 抖音批量下载神器:5步搞定无水印视频下载的完整技术指南
  • Markdown浏览器插件:让文档阅读变得简单优雅
  • Avogadro终极指南:从零开始掌握专业分子编辑器
  • DeepSeek-V2革命性架构解析:MLA如何实现93.3% KV缓存压缩与5.76倍推理加速
  • PowerToys命令模式:架构思维下的系统工具革命
  • 厦门大学LaTeX论文模板:让毕业论文写作变得轻松高效
  • 2025高碳素超轻超硬鱼竿推荐,全场景适配才是真刚需 - 品牌2026
  • GitToolBox插件:提升IntelliJ IDEA Git开发效率的完整指南
  • 快速上手NPYViewer:轻松查看和可视化.npy文件
  • 如何快速掌握FFXIV TexTools:终极游戏模组制作新手指南
  • SVGAPlayer-Web-Lite轻量级动画播放器终极指南:移动端性能优化技巧