[传智杯 #3 初赛] 运气
题目背景
YYH Land(Yoauld,Youthful & Happy Land) 是位于炽蓝仙野的一片神奇的国度,那里的人们过着无拘无束的的快乐生活。
题目描述
哈兰·斯威提是 YYH Land 远近闻名的注铅骰子爱好者。有一天他碰到了这么一个问题:
你有一枚 6 6 6 个面的骰子,分别写了 1 , 2 , 3 , 4 , 5 , 6 1,2,3,4,5,6 1,2,3,4,5,6 ,每一面朝上的概率是均等的。
现在哈兰想知道,如果他投掷 n n n 次,并且将结果按顺序写在纸上成为一个数。(比如说如果哈兰扔了 3 3 3 次,分别是 3 , 2 , 5 3,2,5 3,2,5 ,那么他最后得到的数就是 325 325 325)他现在想知道这个数是 k k k 的倍数的可能情况有多少种,其中 k k k 是一个特定的数。
由于这个方案数可能会很大,所以请你输出结果对 1 0 9 + 7 10^9+7 109+7 取模的结果。
输入格式
一行两个整数 n , k n,k n,k ,意义如题所示。
输出格式
一行一个整数,表示答案。
样例 #1
样例输入 #1
2 11
样例输出 #1
6
提示
样例解释
在投掷两次骰子总共 36 36 36 种可能中,只有 $(“11”,“22”,“33”,“44”,“55”,“66”) $ 是符合条件的。所以答案是 6 6 6。
数据规模与约定
对于
40
%
40\%
40% 的数据,满足
n
n
n 分别为
1
,
2
,
3
,
4
1,2,3,4
1,2,3,4;
对于另外
30
%
30\%
30% 的数据,满足 $ 1 \leq k \leq 3$;
对于
100
%
100\%
100% 的数据,满足
1
≤
n
≤
10
,
1
≤
k
≤
1000
1 \leq n \leq 10, 1 \leq k\leq 1000
1≤n≤10,1≤k≤1000;
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn =2007;
const ll mod = 1e9+7;
ll dp[15][1005];
int n,m;
int main()
{
cin>>n>>m;
dp[0][0]=1;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
for(int k=1;k<=6;k++)
dp[i+1][(j*10+k)%m]=(dp[i+1][(j*10+k)%m]+dp[i][j])%mod;
printf("%lld\n",dp[n][0]);
return 0;
}