본문 바로가기

알고리즘/C++

이동하기_백준11048

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