-
[백준][11048] 이동하기Algorithm/백준 2020. 3. 22. 22:57
https://www.acmicpc.net/problem/11048
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마다 방에 놓여져있는 사탕을 모두 가져갈 수 있다. 또, 미로 밖으
www.acmicpc.net
풀이과정
1. dp로 접근했다.
2. dp[n][m]에는 최대 사탕 갯수가 들어간다.
3. dp[n][m] = max(dp[n-1][m] , dp[n][m -1]) 라는 식을 구하였다.
소스코드
더보기#include <stdio.h> #include <string.h> int map[1001][1001]; int dp[1001][1001]; int N, M; int solution(int y, int x) { if (dp[y][x] != -1) { return dp[y][x]; } if (y - 1 >= 0) { dp[y][x] = solution(y - 1, x); } if (x - 1 >= 0) { int tmp = solution(y, x - 1); if (tmp > dp[y][x]) { dp[y][x] = tmp; } } dp[y][x] += +map[y][x]; return dp[y][x]; } int main() { scanf("%d %d", &N, &M); memset(dp, -1, sizeof(dp)); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { scanf("%d", &map[i][j]); } } dp[0][0] = map[0][0]; printf("%d\n", solution(N, M)); }
'Algorithm > 백준' 카테고리의 다른 글
[백준][2156번] 포도주 시식 (0) 2020.03.22 [백준][11052번] 카드 구매하기 (0) 2020.03.22 [백준][9465번] 스티커 (0) 2020.03.19 [백준][11057번] 오르막 수 (0) 2020.03.19 [백준][10844번] 쉬운 계단 수 (0) 2020.03.19