백준/다이나믹 프로그래밍
뮤탈리스크
연구하는개발자
2021. 2. 19. 18:09
728x90
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;
}