luogu P2657 [SCOI2009]windy数 数位dp入门题

Posted qingyuyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P2657 [SCOI2009]windy数 数位dp入门题相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=15;
int len;
int d[N];
int f[N][N];
int dfs(int pos,int pre,bool lead,int limit)
{
	if(!pos)
		return 1;
	if(!limit && f[pos][pre]!=-1 && !lead)
		return f[pos][pre];
	int cnt=0;
	int up=limit?d[pos]:9;
	for(int i=0;i<=up;i++)
	{
		if(lead)
		{
			if(i==0)
				cnt+=dfs(pos-1,pre,lead,limit&&d[pos]==i);
			else
				cnt+=dfs(pos-1,i,false,limit&&d[pos]==i);
		}
		else
		{
			if(abs(i-pre)<2)
				continue;
			else
				cnt+=dfs(pos-1,i,false,limit&&d[pos]==i);
		}
	}
	if(limit)
		return cnt;
	else
		return f[pos][pre]=cnt;
}
int solve(int x)
{
	len=0;
	while(x)
	{
		d[++len]=x%10;
		x/=10;
	}
	return dfs(len,-1,1,1);
}
int main()
{
	int a,b;
	cin>>a>>b;
	memset(f,-1,sizeof f);
	cout<<solve(b)-solve(a-1)<<endl;
	return 0;
}

以上是关于luogu P2657 [SCOI2009]windy数 数位dp入门题的主要内容,如果未能解决你的问题,请参考以下文章

luogu P2657 [SCOI2009]windy数 数位dp入门题

P2657 [SCOI2009]windy数

P2657 [SCOI2009]windy数

luogu2657bzoj1026 [SCOI2009]windy数 [动态规划 数位dp]

P2657 [SCOI2009] windy 数

P2657 [SCOI2009]windy数