개발자 톡
연습문제 톡
나무 수확
DP로 풀이하였는데 테케 12번에 대하여 반례가 궁금합니다
- 등록일
- 2024-06-28 11:26:42
- 조회수
- 198
- 작성자
- qhdrmfdl123
import sys n = int(input()) field = [list(map(int, input().split())) for _ in range(n)] dp = [[[0, 0] for _ in range(n)] for _ in range(n)] dp[0][0] = [field[0][0]*2, field[0][0]] for i in range(n): for j in range(n): candits = [] for dx, dy in [(-1, 0), (0, -1)]: bx, by = i+dx, j+dy if bx < 0 or bx >= n or by < 0 or by >= n: continue if dp[bx][by][1] < field[i][j]: tsum_value, tmax_value = dp[bx][by][0] - dp[bx][by][1] + 2*field[i][j], field[i][j] if dp[i][j][0] <= tsum_value: candits.append((tsum_value, tmax_value)) else: tsum_value = dp[bx][by][0] + field[i][j] if dp[i][j][0] <= tsum_value: candits.append((tsum_value, dp[bx][by][1])) if not candits: continue candits.sort(key=lambda x: (-x[0], x[1])) dp[i][j][0], dp[i][j][1] = candits[0][0], candits[0][1] print(dp[-1][-1][0])
#나무_수확