您的位置:首页 > 其它

bzoj1026 [SCOI2009]windy数

2017-09-08 22:29 387 查看
题目

又是数位dp

只要套模板就好了。。。

值得说明的是,这是第一道需要记录前缀0的数位dp233。

#include<bits/stdc++.h>
using namespace std;
int dp[15][10][2];
int digit[15];
int m,n;
int len;
int DFS(int pos,int pre,int limit,int flag)
{
if(pos==0)return 1;
if(!limit&&dp[pos][pre][flag]!=-1)return dp[pos][pre][flag];
int up=limit?digit[pos]:9;
int tmp=0;
for(int i=0;i<=up;i++)
{
if(abs(pre-i)>=2||pos==len||flag)tmp+=DFS(pos-1,i,limit&&i==up,flag&&i==0);
}
if(!limit)dp[pos][pre][flag]=tmp;
return tmp;
}
int solve(int x)
{
len=0;
while(x)digit[++len]=x%10,x/=10;
return DFS(len,0,1,1);
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%d%d",&m,&n);
printf("%d",solve(n)-solve(m-1));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: