这是四川网络赛的B题,题目意思很简单,求不超过n,包含数字13并能被13整除的个数.很遗憾,但是没想到是dp ,推了半天做出来。惭愧啊。最初是用稀疏表来做,但很遗憾,TLE了。最后参考别人的代码。自己再想想才AC了。太菜了。加油啊。
思路:
令dp1[i][j][k] 表示在位置i (i>=0)的数字为 j(0<=j<10) 时,从j*10^i ---- (j+1)*10^i-1 ,这 10^i 个数中,包含连续数字13且模 13 的余数为k 个数。同理 dp2[i][j][k] 表示不包含连续数字13,余数为k 的个数。
递归方程: 9
dp1[i][j][kk]= Σ(dp1[i-1][t][k])其中kk=(j*10^i+k)%13;
t=0
这里需要注意特殊情况,即出现了13. 这时在上面的基础上需加上 dp2[i][t][k],
9
dp1[i][j][kk]= Σ(dp2[i-1][t][k]);
t=0
同理 9
dp2[i][j][kk]= Σ(dp2[i-1][t][k]);
t=0
若出现13 则dp2[i][j][kk]=0;
初始时
dp2[0][k][k]=1,(0<=k<10)其余的为0.
最后对输入的n,只需在此基础上计算即可。当要注意出现 13 的特殊计数。即要加上 dp2[i][j][k].