前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色,请你用 红、绿、蓝

2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色,请你用 红、绿、蓝

作者头像
福大大架构师每日一题
发布2023-06-08 14:42:42
1810
发布2023-06-08 14:42:42
举报

2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色,

请你用 红、绿、蓝 三种颜色为每个单元格涂色。所有单元格都需要被涂色,

涂色方案需要满足:不存在相邻两个单元格颜色相同的情况。

返回网格涂色的方法数。因为答案可能非常大。

返回 对 109 + 7 取余 的结果。

1 <= n <= 1000。

1 <= m <= 5。

答案2023-02-11:

递归。

代码用rust编写。代码如下:

代码语言:javascript
复制
use std::iter::repeat;
fn main() {
    let ans3 = color_the_grid(4, 3);
    println!("ans3 = {}", ans3);
}

static MOD: i32 = 1000000007;

fn color_the_grid(m: i32, n: i32) -> i32 {
    let status = 1 << (m << 1);
    let mut dp: Vec<Vec<Vec<i32>>> = repeat(
        repeat(repeat(-1).take(status as usize).collect())
            .take(m as usize)
            .collect(),
    )
    .take(n as usize)
    .collect();
    return process(0, 0, 0, n, m, &mut dp);
}

fn process(i: i32, j: i32, s: i32, n: i32, m: i32, dp: &mut Vec<Vec<Vec<i32>>>) -> i32 {
    if i == n {
        return 1;
    }
    if j == m {
        return process(i + 1, 0, s, n, m, dp);
    }
    if dp[i as usize][j as usize][s as usize] != -1 {
        return dp[i as usize][j as usize][s as usize];
    }
    let up = (s >> (j * 2)) & 3;
    let left = if j == 0 { 0 } else { (s >> ((j - 1) << 1)) & 3 };
    let mut ans = 0;
    if up != 1 && left != 1 {
        ans += process(i, j + 1, (s ^ (up << (j * 2))) | (1 << (j * 2)), n, m, dp);
        ans %= MOD;
    }
    if up != 2 && left != 2 {
        ans += process(i, j + 1, (s ^ (up << (j << 1))) | (2 << (j << 1)), n, m, dp);
        ans %= MOD;
    }
    if up != 3 && left != 3 {
        ans += process(i, j + 1, (s ^ (up << (j << 1))) | (3 << (j << 1)), n, m, dp);
        ans %= MOD;
    }
    dp[i as usize][j as usize][s as usize] = ans;
    return ans;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档