연구하는개발자 2021. 2. 19. 18:09
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;
}