1
const DICE_LEN: usize = 7;2
const MOD: usize = 1_000_000_007;4
pub fn gen_next_map() -> [u8; DICE_LEN] {6
0b1111110, // 0 -> [1, 2, 3, 4, 5, 6]7
0b1111100, // 1 -> [2, 3, 4, 5, 6]8
0b0101010, // 2 -> [1, 3, 5]9
0b0110110, // 3 -> [1, 2, 4, 5]10
0b0101010, // 4 -> [1, 3, 5]11
0b1011110, // 5 -> [1, 2, 3, 4, 6]12
0b0100010, // 6 -> [1, 5]17
pub fn distinct_sequences(n: i32) -> i32 {18
let n = n as usize - 1;20
let next_map = gen_next_map();22
let mut dp = [[usize::MIN; DICE_LEN]; DICE_LEN];23
for j in 1..DICE_LEN {24
dp[usize::MIN][j] = 1;28
let mut dp_next = [[usize::MIN; DICE_LEN]; DICE_LEN];30
for prev in 0..DICE_LEN {31
for i in 0..DICE_LEN {32
let flags = next_map[i] & !(1 << prev);34
for j in 0..DICE_LEN {35
if (flags >> j) & 1 < 1 {39
dp_next[i][j] += dp[prev][i];44
for i in 0..DICE_LEN {45
for j in 0..DICE_LEN {54
.map(|v| v.into_iter().sum::<usize>() % MOD)