Skip to content

Commit 298b2dc

Browse files
authored
Create number-of-distinct-roll-sequences.cpp
1 parent 70d3264 commit 298b2dc

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Time: O(6^3 * n)
2+
// Space: O(6^2)
3+
4+
// dp
5+
class Solution {
6+
public:
7+
int distinctSequences(int n) {
8+
static const int MOD = 1e9 + 7;
9+
if (n == 1) {
10+
return 6;
11+
}
12+
vector<vector<int>> dp(6, vector<int>(6));
13+
for (int i = 0; i < 6; ++i) {
14+
for (int j = 0; j < 6; ++j) {
15+
if (i != j && gcd(i + 1, j + 1) == 1) {
16+
dp[i][j] = 1;
17+
}
18+
}
19+
}
20+
for (int _ = 0; _ < n - 2; ++_) {
21+
vector<vector<int>> new_dp(6, vector<int>(6));
22+
for (int i = 0; i < 6; ++i) {
23+
for (int j = 0; j < 6; ++j) {
24+
if (!dp[i][j]) {
25+
continue;
26+
}
27+
for (int k = 0; k < 6; ++k) {
28+
if (!dp[j][k]) {
29+
continue;
30+
}
31+
if (k != i) {
32+
new_dp[i][j] = (new_dp[i][j] + dp[j][k]) % MOD;
33+
}
34+
}
35+
}
36+
}
37+
dp = move(new_dp);
38+
}
39+
int result = 0;
40+
for (int i = 0; i < 6; ++i) {
41+
for (int j = 0; j < 6; ++j) {
42+
result = (result + dp[i][j]) % MOD;
43+
}
44+
}
45+
return result;
46+
}
47+
};

0 commit comments

Comments
 (0)