当前位置: 首页 > 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.rkmt.cn/news/119845.html

相关文章:

  • LosslessCut字幕处理终极指南:从零基础到精通字幕管理
  • 网络自动化实战:Kea DHCP高效部署与性能优化指南
  • 终极对决:Maple Mono vs JetBrains Mono,哪个才是你的编程伴侣?
  • Windows 11任务栏自定义工具Taskbar11:打造个性化工作空间
  • BOTW存档编辑器GUI深度攻略:海拉鲁冒险自定义指南
  • 革命性AI绘图工具:SD-WebUI模型下载器重塑创作体验
  • 2025新手买钓鱼竿必看:超轻超硬手竿推荐,品牌选购不迷茫 - 品牌2026
  • HandheldCompanion终极配置指南:Windows掌机优化简单上手
  • MPV播放器完全配置指南:用MPV_lazy轻松打造专业级媒体中心
  • 解锁macOS效率新境界:开源应用完全指南
  • 电商场景下的智能导购:Kotaemon实战应用分享
  • Markdown浏览器插件:让文档阅读变得简单优雅
  • DeepSeek-V2革命性架构解析:MLA如何实现93.3% KV缓存压缩与5.76倍推理加速
  • Unitree Go2 ROS2 SDK:颠覆性架构如何重塑机器人开发范式
  • 如何快速配置115proxy-for-kodi:Kodi 115原码播放的完整指南
  • 工业监控利器:Scada-LTS 开源SCADA系统完整使用指南
  • Source Han Serif CN 免费字体终极使用指南:7种字重一键配置
  • Syncthing Android 安装与配置指南
  • MZmine 3实战指南:轻松解决质谱数据分析三大痛点
  • Avogadro分子编辑器:化学研究的革命性可视化工具
  • ComfyUI ControlNet Aux 深度图与法线图终极完整指南:从零开始掌握3D感知技术
  • MoviePilot智能推送时段管理:解决家庭场景消息打扰难题
  • 百度网盘解析神器:3分钟实现高速下载,轻松突破300M限制!
  • Netgear路由器终极拯救指南:nmrpflash完整使用教程
  • TikZ科学可视化图形库快速上手指南
  • 终极指南:如何在x86 Mac上实现QuPath与PyTorch的无缝集成
  • Kotaemon框架的负载均衡策略配置指南
  • Kotaemon博物馆讲解员AI语音风格定制
  • 告别卡顿GIF!3步教你用AI补帧让动画丝滑如新
  • EdgeRemover终极指南:Windows系统Edge浏览器一键管理方案