编程语言
首页 > 编程语言> > 数位DP--P2657--Windy数 java实现

数位DP--P2657--Windy数 java实现

作者:互联网

什么是数位DP

数位 DP 问题往往都是这样的题型,给定一个闭区间 [L,R],让你求这个区间中满足 某种条件 的数的总数。

(来自 OI-WIKI )

按照一般的方法,我们会遍历区间[L,R],对每个数字进行判断,是否符合题目要求.

但是这类题目的区间范围往往都比较大,单纯地遍历每一个数字,会超时.

这种情况下,使用数位DP的方式,进行求解.

下面根据

进行具体分析

这类算法,基本都是套模板.所以也按照这道题目,将模板写出来.

题目背景

windy 定义了一种 windy 数。

题目描述

不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。windy 想知道,在 ab 之间,包括 ab ,总共有多少个 windy 数?

输入格式

输入只有一行两个整数,分别表示 ab

输出格式

输出一行一个整数表示答案。

对于全部的测试点,保证

\[1 \leq a \leq b \leq 2 \cdot 10^9 \]

总体思路

1.问题转化

对于区间中的问题,我们将它简化成只有一个边界的问题.类似于计算区间和.

对于在区间[L,R]上,计算满足某项条件的数字的个数result.

假设我们有函数F(x),表示在[0,x]区间上,满足条件的数字的个数.

那么result = F(R)-F(L-1);

2.具体求出F(x)

对于给定的输入M,在区间范围[0,M]中,我们按照每一位数字进行枚举(区别于遍历每一个数字),记录所有的情况---相邻数字的差至少为2.将结果记录到数组 A[]中.

标签:10,java,数字,状态,--,位置,int,Windy,题目
来源: https://www.cnblogs.com/reclusiveone/p/15084921.html