結果
| 問題 |
No.1761 Sequence Distance
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-07-27 22:15:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,303 bytes |
| コンパイル時間 | 350 ms |
| コンパイル使用メモリ | 82,324 KB |
| 実行使用メモリ | 307,920 KB |
| 最終ジャッジ日時 | 2025-07-27 22:16:08 |
| 合計ジャッジ時間 | 20,215 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | AC * 1 WA * 19 TLE * 1 -- * 21 |
ソースコード
MI=lambda:map(int,input().split())
li=lambda:list(MI())
ii=lambda:int(input())
mod=998244353
n,m=MI()
# dp[d][s]: 当前在某步,|D|=d,累计面积=s 的方案数
# 0 ≤ d ≤ m, 0 ≤ s ≤ m
dp=[[0]*(m+1) for _ in range(m+2)]
dp[0][0]=1
for j in range(n):
ndp=[ [0]*(m+1) for _ in range(m+2) ]
# 只需要枚举 d 到 min(j, m)
lim = min(j, m)
# 但无论 j,d 最多到 m
for d in range(lim+1):
row=dp[d]
if not any(row): continue
# Δ=0(水平步,两种类型,共 weight=2),新 |D|=d,area +d
w2=2
add=d
for s in range(m-add+1):
v=row[s]
if v:
ndp[d][s+add]=(ndp[d][s+add] + v*w2) % mod
# Δ=+1,上升,新 |D|=d+1,area +d+1,weight=1
add=d+1
if add<=m:
for s in range(m-add+1):
v=row[s]
if v:
ndp[d+1][s+add]=(ndp[d+1][s+add] + v) % mod
# Δ=-1,下降,新 |D|=d-1(仅当 d>0),area +d-1,weight=1
if d>0:
add=d-1
for s in range(m-add+1):
v=row[s]
if v:
ndp[d-1][s+add]=(ndp[d-1][s+add] + v) % mod
dp=ndp
# 最后要求回到 D=0 且面积正好为 m
print(dp[0][m] % mod)