20250505 finished.

This commit is contained in:
jackfiled 2025-05-05 20:12:55 +08:00
parent 706700c639
commit b94d1bc1e7
2 changed files with 52 additions and 0 deletions

View File

@ -634,3 +634,5 @@ mod p838_push_dominoes;
mod p1007_minimum_domino_rotations_for_equal_row;
mod p1128_number_of_equivalent_domino_pairs;
mod p790_domino_and_tromino_tiling;

View File

@ -0,0 +1,50 @@
/**
* [790] Domino and Tromino Tiling
*/
pub struct Solution {}
// submission codes start here
const MOD: i32 = 1_000_000_007;
impl Solution {
pub fn num_tilings(n: i32) -> i32 {
let n = n as usize;
let mut dp = vec![0; n + 1];
dp[0] = 1;
let mut prefix = 0;
// dp的最后必须是平整的
// dp[n] = dp[n - 1] + dp[n - 2] + for i in 0..=n-3 Sum(dp[i] * 2)
for i in 1..=n {
dp[i] = dp[i - 1] % MOD;
if i >= 2 {
dp[i] = (dp[i] + dp[i - 2]) % MOD;
}
if i >= 3 {
prefix = (prefix + dp[i - 3] * 2 % MOD) % MOD;
dp[i] = (dp[i] + prefix) % MOD;
}
}
dp[n]
}
}
// submission codes end
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_790() {
assert_eq!(1, Solution::num_tilings(1));
assert_eq!(2, Solution::num_tilings(2));
assert_eq!(5, Solution::num_tilings(3));
assert_eq!(11, Solution::num_tilings(4));
assert_eq!(312342182, Solution::num_tilings(30));
}
}