init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
37
9B.py
Normal file
37
9B.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
import sys
|
||||
|
||||
data = sys.stdin.read().split()
|
||||
if data:
|
||||
target_N = int(data[0])
|
||||
target_H = int(data[1])
|
||||
MOD = 786433
|
||||
if target_H > 30:
|
||||
print(0)
|
||||
sys.exit(0)
|
||||
min_n = [0] * 35
|
||||
min_n[0] = 0
|
||||
min_n[1] = 1
|
||||
for h in range(2, 35):
|
||||
min_n[h] = min_n[h-1] + min_n[h-2] + 1
|
||||
dp = [[0] * (target_N + 1) for _ in range(target_H + 2)]
|
||||
dp[0][0] = 1
|
||||
if target_N >= 1:
|
||||
dp[1][1] = 1
|
||||
for h_idx in range(2, target_H + 2):
|
||||
h_real = h_idx - 1
|
||||
if min_n[h_real + 1] > target_N:
|
||||
break
|
||||
for n in range(min_n[h_real + 1], target_N + 1):
|
||||
ways = 0
|
||||
min_k = min_n[h_idx - 2]
|
||||
max_k = n - 1 - min_n[h_idx - 2]
|
||||
if min_k > max_k:
|
||||
continue
|
||||
for k in range(min_k, max_k + 1):
|
||||
r = n - 1 - k
|
||||
w1 = dp[h_idx-1][k] * dp[h_idx-1][r]
|
||||
w2 = dp[h_idx-1][k] * dp[h_idx-2][r]
|
||||
w3 = dp[h_idx-2][k] * dp[h_idx-1][r]
|
||||
ways += w1 + w2 + w3
|
||||
dp[h_idx][n] = ways % MOD
|
||||
print(dp[target_H + 1][target_N])
|
||||
Loading…
Add table
Add a link
Reference in a new issue