int digit[maxn];
int dp[maxn][][][][];//维度
int dfs(int num, ,bool limit) //位数,传递条件(dp维度),上界判断{
if(num == -1)return 0; //最后一位时,根据情况返回1或0或者其他情况,看题目到底需要的贡献是个啥
if(!limit && dp[num][][][](维度)!=-1) //已经走过此种状态
return dp[num][][][];
int ans = 0; //计数
int up = limit?a[num]:9; //上界
for(int i = 0;i <= up;i++){
ans += dfs(num-1, ,limit && i== up);//传递
}
if(!limit) //判断是否可以储存
dp[num][ ]=ans;
return ans;
}
int solve(int x) //将x拆开存入a数组
{
int num=0;
while(x){
digit[num] = x%b; //b表示进制!!!
num++;
x/=b;
}
return dfs(num-1, ,true);//传递
}
int main(){
int l,r;
while(~scanf("%d%d",&l,&r)){
memset(dp,-1,sizeof(dp));
printf("%d\n",solve(r)-solve(l-1));
}
return 0;
}
数位dp模板
最新推荐文章于 2024-01-16 20:11:54 发布