본문 바로가기

백준/다이나믹 프로그래밍

뮤탈리스크

728x90

www.acmicpc.net/problem/12869

 

12869번: 뮤탈리스크

1, 3, 2 순서대로 공격을 하면, 남은 체력은 (12-9, 10-1, 4-3) = (3, 9, 1)이다. 2, 1, 3 순서대로 공격을 하면, 남은 체력은 (0, 0, 0)이다.

www.acmicpc.net

#include <iostream>
#include <algorithm>
#include <cstring>
#define INF 999999999
using namespace std;
int dp[70][70][70];
int n, a, b, c;
int func(int x, int y, int z) {
    if (!x&&!y&&!z)return 0;
    int &ret = dp[x][y][z];
    if (ret != -1)return ret;
    ret = INF;
    ret = min(ret, func(max(0, x - 9), max(0, y - 3), max(0, z - 1)) + 1);
    ret = min(ret, func(max(0, x - 9), max(0, y - 1), max(0, z - 3)) + 1);
    ret = min(ret, func(max(0, x - 3), max(0, y - 9), max(0, z - 1)) + 1);
    ret = min(ret, func(max(0, x - 1), max(0, y - 9), max(0, z - 3)) + 1);
    ret = min(ret, func(max(0, x - 3), max(0, y - 1), max(0, z - 9)) + 1);
    ret = min(ret, func(max(0, x - 1), max(0, y - 3), max(0, z - 9)) + 1);
    return ret;
}
int main() {
    memset(dp, -1, sizeof(dp));
    cin>>n;
    cin>>a>>b>>c;
    cout<<func(a,b,c);
    return 0;
}


'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

새로운 게임  (0) 2021.02.25
기타리스트  (0) 2021.02.21
평범한 배낭  (0) 2021.02.17
파일 합치기  (0) 2021.01.22
1,2,3 더하기 4  (0) 2021.01.21