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

解题思路:模板题目,初始的pre是12,保证第一位能满足

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int data[12],dp[12][13];
int DP(int pos,int pre,bool jud, bool board) {

	if(pos == -1)
		return 1;
	if(!board && dp[pos][pre] != -1)
		return dp[pos][pre];
	int ans = 0;
	int end = board? data[pos]:9;
	for(int i = 0; i <= end; i++) {
		if(!(jud || i)) 
			ans += DP(pos-1,12,0,board && (i == end));
		else if(fabs(pre-i) >= 2)
			ans += DP(pos-1,i,1,board && (i == end));
	}
	if(!board)
		dp[pos][pre] = ans;
	return ans;
}
int solve(int x) {
	int pos = 0;
	while(x) {
		data[pos++] = x % 10;
		x = x / 10;	
	}
	return DP(pos-1,12,0,1);

}
int main() {
	int left,right;
	memset(dp,-1,sizeof(dp));
	scanf("%d%d",&left,&right);
	printf("%d\n",solve(right) - solve(left-1));
	return 0;
}