尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

AcWing 1083:Windy数 ← 数位DP

AcWing 1083:Windy数 ← 数位DP
📅 发布时间:2026/6/20 4:05:49

​【题目来源】
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

 

​

相关新闻

  • LosslessCut字幕处理终极指南:从零基础到精通字幕管理
  • 网络自动化实战:Kea DHCP高效部署与性能优化指南
  • 终极对决:Maple Mono vs JetBrains Mono,哪个才是你的编程伴侣?

最新新闻

  • RAMP技术:基于强化学习的自适应混合精度量化解析
  • 构建稳健的股票数据管道:从yfinance/AkShare到自动化更新
  • 2026年可靠的普通珍珠棉/苏州普通珍珠棉/苏州异形珍珠棉精选厂家推荐 - 品牌宣传支持者
  • Web攻击日志分析实战:从Nginx/Apache日志采集到SQL注入/XSS攻击检测与告警
  • Kimi 2.5 Agent Swarm:轻量级任务协作架构解析
  • AI 引爆内存危机,苹果即将离任 CEO 称产品涨价“不可避免”

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号