結果

問題 No.1916 Making Palindrome on Gird
ユーザー kozy
提出日時 2022-04-30 01:33:01
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 349 ms / 3,000 ms
コード長 941 bytes
コンパイル時間 173 ms
コンパイル使用メモリ 82,016 KB
実行使用メモリ 142,784 KB
最終ジャッジ日時 2024-06-29 07:31:44
合計ジャッジ時間 7,183 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
  H,W=map(int,input().split())
  L=list()
  for i in range(H):
    S=input()
    L.append(S)
  mod=10**9+7
  dp=dict()
  M=((H+W)//2)
  dp=[[[0]*M for i in range(M)] for j in range(M)]
  for k in range(M-1,-1,-1):
    #k:距離
    for i in range(k+1):
      for j in range(k+1):
        a=i
        b=k-i
        c=H-1-j
        d=W-1-(k-j)
        if 0<=a<H and 0<=b<W and 0<=c<H and 0<=d<W:
          if L[a][b]==L[c][d]:
            if not (a<=c and b<=d):
              continue
            if k==M-1:
              dp[i][j][k]=1
              continue
            else:
              if a!=H-1:
                if j!=H:
                  dp[i][j][k]+=dp[a+1][j+1][k+1]
                dp[i][j][k]+=dp[a+1][j][k+1]
              if j!=H:
                dp[i][j][k]+=dp[a][j+1][k+1]
              dp[i][j][k]+=dp[a][j][k+1]
              dp[i][j][k]%=mod
          else:
            dp[i][j][k]=0
  print(dp[0][0][0])
main()
0