https://www.acmicpc.net/problem/11048
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는
www.acmicpc.net
이동할 수 있는 경우의 수는 x , y 좌표 둘다 +1 또는 둘중 하나만 +1인 경우이다
각 좌표에 도착했을때 3가지 경우를 비교하여 가장 큰 수를 지정해 주면 최종적으로 목표 좌표에 제일 많은 사탕을 가지고 갔을 때의 개수를 구할 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int map[1001][1001];
int dp[1001][1001];
int n, x, y;
int mm(int i, int j, int k) { // 세개의 수 중 큰 수 반환
if (i < j) i = j;
if (i < k) i = k;
return i;
}
int main()
{
scanf("%d%d", &x, &y);
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
scanf("%d", &map[i][j]);
}
}
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
dp[i][j] = mm(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + map[i][j];
}
}
printf("%d", dp[x][y]);
return 0;
}
'알고리즘 > C++' 카테고리의 다른 글
나이트의 이동_백준7562 (0) | 2023.08.29 |
---|---|
단어수학_백준1339 (0) | 2023.08.29 |
경비원_백준2564 (0) | 2023.08.17 |
창고 다각형_백준2304 (0) | 2023.08.17 |
햄버거분배_백준19941 (0) | 2023.08.17 |