2022/06/29 ABC240C
ABC240 C - Jumping Takahashi
DPの考え方が定着しない. 最初DPもどきなコードを書いてしまった.
N, X = list(map(int,input().split())) dp = [set() for i in range(N+1)] dp[0].add(0) for i in range(N): a, b = list(map(int, input().split())) l = list(dp[i]) for j in range(len(l)): dp[i+1].add(l[j]+a) dp[i+1].add(l[j]+b) if X in dp[N]: print("Yes") else: print("No")
想定解とはちょっと違う解き方をしてしまったので,解説を読みながら解きなおした. 配列の要素に何を入れればいいのかがイメージできないから,DPをいつまで経っても書けないんだろうな.
N, X = list(map(int,input().split())) # dp[i][j]:i回ジャンプを行った時点で座標jの位置にいることが可能なら1,不可能なら0 dp = [[0]*(X+1) for i in range(N+1)] dp[0][0] = 1 for i in range(N): a, b = list(map(int,input().split())) for j in range(X): if dp[i][j] == 1: if j+a <= X: dp[i+1][j+a] = 1 if j+b <= X: dp[i+1][j+b] = 1 if dp[N][X] == 1: print("Yes") else: print("No")