public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();//右边界
int num=sc.nextInt();//目标数
int[][] dp=new int[n/10+1][10];//i表示前几位,j表示个位,dp[i][j]表示某个数含有num的个数
int ans=0;
for (int i = 0; i <n/10+1 ; i++) {
for (int j = 0; j<10&&i*10+j<=n; j++) {
if(i==0){//<10的数不计0
if(j==num&&num!=0)
dp[i][j]=1;
}else {
if(j==num)//判断个位是否==num
dp[i][j]=dp[i/10][i%10]+1;
else dp[i][j]=dp[i/10][i%10];
}
ans+=dp[i][j];//累加
}
}
System.out.println(ans);
}
数位dp算法——洛谷p1980
最新推荐文章于 2024-09-23 08:37:22 发布
这篇博客介绍了如何使用动态规划解决一个计数问题,即在一个整数中计算目标数 num 出现的次数。通过创建 dp 数组来存储部分解决方案,从个位开始遍历,递推计算符合条件的数的数量。适用于0-9范围内数字的组合,适用于编程竞赛或算法学习
摘要由CSDN通过智能技术生成