力扣每日一题5-18

class Solution {

public int colorTheGrid(int m, int n) {

// 每一列可能的状态总数 每个单元有3可能

int totalState = 1;

for (int i = 0; i < m; ++i) totalState *= 3;

// prek 代表前一轮dp 状态为k 的方案总数

int \[\] pre = new int totalState;

// 初始化合法填色 的 方案数为1

for (int state = 0; state < totalState; ++state) {

if (checkCol(state, m)) prestate = 1;

}

for (int i = 1; i < n; ++i) {

int \[\] cur = new int totalState;

// 枚举可能的转移

for (int preState = 0; preState < totalState; ++preState) {

if (prepreState == 0) continue;

for (int curState = 0; curState < totalState; ++curState) {

// 行和列的填色都满足题设

if (checkCol(curState, m) && checkRow(preState, curState, m)) {

curcurState = addWithMode(curcurState, prepreState);

}

}

}

pre = cur;

}

int planNum = 0;

for (int state = 0; state < totalState; ++state) {

planNum = addWithMode(planNum, prestate);

}

return planNum;

}

private boolean checkCol(int state, int m) {

int prevCeilColor = -1;

while (m-- > 0) {

if (state % 3 == prevCeilColor) {

return false;

}

prevCeilColor = state % 3;

state /= 3;

}

return true;

}

private boolean checkRow(int pre, int cur, int m) {

while (m-- > 0) {

if (pre % 3 == cur % 3) return false;

pre /= 3;

cur /= 3;

}

return true;

}

private int addWithMode(int a, int b) {

int mode = (int) 1E9 + 7;

return (a + b) % mode;

}

}

相关推荐
折哥的程序人生 · 物流技术专研2 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang3 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
CS创新实验室3 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
西门吹-禅4 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_4 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19875 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
海石5 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode
AI小码5 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
海石5 小时前
1400分的dp汗流浃背之【交替子数组计数】
算法·leetcode
奋发向前wcx5 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先