简单数位动态规划即可。用一个十位三进制数来表示每个数字的使用情况,用$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]
|