白駿10942パリン症候群?


質問する


https://www.acmicpc.net/problem/10942

コード#コード#

import sys

n = int(input())
lis = list(map(int, input().split()))
m = int(input())
result = ''
dp = [[0]*n for _ in range(n)]
for i in range(n):
    left = i
    right = i
    while left >= 0 and right < n and lis[left] == lis[right]:
        dp[left][right] = 1
        left -= 1
        right += 1

    if i == n-1:
        continue
    left = i
    right = i+1
    while left >= 0 and right < n and lis[left] == lis[right]:
        dp[left][right] = 1
        left -= 1
        right += 1

for i in range(m):
    s, e = map(int, sys.stdin.readline().rstrip().split())
    result += str(dp[s-1][e-1])+'\n'

print(result)

に答える


dpを2次元配列に設定し、入力リストのsからeがパリンdromであればdp[s][e]を1に変更します.
入力したリストを調べて、二重ポインタのパリンドロンを使っているかどうかを確認して、dpテーブルを更新してくれましたが、実はこれがdpで解けたのか分かりません.