bzoj1026数位dp

时间:2021-11-09 04:56:57

基础的数位dp

但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了)

 #include <bits/stdc++.h>
using namespace std;
int a,b,len;
int dp[][],dight[];
int solve(int x)
{
if (x==) return ;
int ans=;
for(len=;x>;x/=)
dight[++len]=x%;
for(int i=;i<=dight[len]-;i++)
ans+=dp[len][i];
for(int i=len-;i>;i--)
for(int j=;j<=;j++)
ans+=dp[i][j];
for(int i=len-;i>;i--)
{
for(int j=;j<=dight[i]-;j++)
if (abs(dight[i+]-j)>=) ans+=dp[i][j];
if(abs(dight[i+]-dight[i])<) break;
}
return ans;
}
int main()
{
scanf("%d%d",&a,&b);
for(int i=;i<=;i++)
dp[][i]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
if(abs(j-k)>=)
dp[i][j]+=dp[i-][k];
printf("%d\n", solve(b+)-solve(a));
}