Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 740cc05

Browse files
Create 1931.py
1 parent c085b27 commit 740cc05

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

‎1901-2000/1931.py‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Solution(object):
2+
def colorTheGrid(self, m, n):
3+
"""
4+
:type m: int
5+
:type n: int
6+
:rtype: int
7+
"""
8+
MOD = 10 ** 9 + 7
9+
10+
# Step 1: Generate all valid column colorings (no vertical conflicts)
11+
def generate_states(pos, prev_color, state):
12+
if pos == m:
13+
states.append(tuple(state))
14+
return
15+
for color in range(3):
16+
if color != prev_color:
17+
state[pos] = color
18+
generate_states(pos + 1, color, state)
19+
20+
states = []
21+
generate_states(0, -1, [0] * m)
22+
index_map = {state: i for i, state in enumerate(states)}
23+
24+
# Step 2: Precompute valid transitions (no horizontal conflicts)
25+
size = len(states)
26+
transitions = [[] for _ in range(size)]
27+
for i, a in enumerate(states):
28+
for j, b in enumerate(states):
29+
if all(x != y for x, y in zip(a, b)):
30+
transitions[i].append(j)
31+
32+
# Step 3: DP initialization
33+
dp = [1] * size
34+
35+
# Step 4: DP iteration for each column
36+
for _ in range(1, n):
37+
new_dp = [0] * size
38+
for i in range(size):
39+
for j in transitions[i]:
40+
new_dp[j] = (new_dp[j] + dp[i]) % MOD
41+
dp = new_dp
42+
43+
# Step 5: Return total number of valid colorings
44+
return sum(dp) % MOD

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /