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;
}
'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글
새로운 게임 (0) | 2021.02.25 |
---|---|
기타리스트 (0) | 2021.02.21 |
평범한 배낭 (0) | 2021.02.17 |
파일 합치기 (0) | 2021.01.22 |
1,2,3 더하기 4 (0) | 2021.01.21 |