반응형

https://www.acmicpc.net/problem/20208

 

20208번: 진우의 민트초코우유

첫번째 줄에 민초마을의 크기인 N과 진우의 초기체력 M, 그리고 민트초코우유를 마실때 마다 증가하는 체력의 양 H가 공백을 두고 주어진다. N, M, H는 모두 10보다 작거나 같은 자연수이다. 두번째

www.acmicpc.net

 

우유의 위치를 기억해두고, 시작 위치에서 각 우유를 선택하며 이동해나갑니다.

우유를 선택할 때마다 해당 지점에서 집에 돌아갈 수 있는지 확인하고, 최대 개수를 업데이트해줍니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

int n, m, h, a, sx, sy, ans = 0;
vector<pair<int, int>> milks;
bool visit[10] = { false };

void dfs(int x, int y, int mm, int depth) {
    if (mm >= abs(x - sx) + abs(y - sy)) {
        ans = max(depth, ans);
    }
    if (depth == milks.size()) return;
    for (int i = 0; i < milks.size(); i++) {
        if (visit[i]) continue;
        int dist = abs(x - milks[i].first) + abs(y - milks[i].second);
        if (dist > mm) continue;
        visit[i] = true;
        dfs(milks[i].first, milks[i].second, mm + h - dist, depth + 1);
        visit[i] = false;
    }
}

int main() {
    scanf("%d %d %d", &n, &m, &h);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &a);
            if (a == 1) sx = i, sy = j;
            else if (a == 2) milks.push_back({ i, j });
        }
    }
    dfs(sx, sy, m, 0);
    printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1662 : 압축  (0) 2021.11.17
백준 14497 : 주난의 난(難)  (0) 2021.11.17
백준 1749 : 점수따먹기  (0) 2021.11.17
백준 2170 : 선 긋기  (0) 2021.11.17
백준 6198 : 옥상 정원 꾸미기  (0) 2021.11.17

+ Recent posts