0491 二重全数字数
* * * *
拉格朗日计划
* * * *
二重全数字数

若一个数中0到9这十个数字每个都恰好出现两次,就称其为二重全数字数。例如$40561817703823564929$就是一个二重全数字数。

有多少个能被11整除的二重全数字数?

本题难度:



解答

简单数位动态规划即可。用一个十位三进制数来表示每个数字的使用情况,用$f(i,j)$表示数位使用为$i$,且模$11$得$j$的数的总数,则有 $$f(i,j)=\sum_{\substack{0 < k < 10,\\ i_k>0,\\(10x+k)\%M=j}}f(i-3^k,x)$$ 这表示从符合状态$f(i-3^k,x)$的数$x$的右侧添加一个数字$k$的状态转移。最终结果是$194505988824000$。

D=10
M=11
f=[[0]*M for i in range(3**D)]
pw=[0]*(D+1)

pw[0]=1
for i in range(1,D+1):
    pw[i]=pw[i-1]*3

for i in range(1,D):
    f[pw[i]][i%M]+=1

for i in range(pw[D]):
    for j in range(M):
        for k in range(D):
            if (i//pw[k])%3 < 2:
                f[i+pw[k]][(j*10+k)%M]+=f[i][j]

print f[-1][0]