마이 플밍 블로그

[C++]백준 12869 - 뮤탈리스크 본문

문제풀이/백준

[C++]백준 12869 - 뮤탈리스크

레옹 2022. 1. 10. 23:01

https://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

 

풀이


DP로 푸는 문제다.

모든 경우의 수를 탐색해서 제일 빨리 SCV를 다 처치하는 경우를 찾는다

코드


#include <iostream>
#include <queue>
#include <memory.h>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
#define MAX 987432
int N;
int SCVHP[4];
int SCV[61][61][61];

int n = 0;
void Mutalisk(int scv1HP,int scv2HP, int scv3HP,int count) {
	if (SCV[scv1HP][scv2HP][scv3HP] <= count)
		return;

	SCV[scv1HP][scv2HP][scv3HP] = count;
	if (scv1HP == 0 && scv2HP == 0 && scv3HP == 0)
		return;
	
	Mutalisk(max(scv1HP - 9, 0), max(scv2HP - 3, 0), max(scv3HP - 1, 0), count + 1);
	Mutalisk(max(scv1HP - 9, 0), max(scv2HP - 1, 0), max(scv3HP - 3, 0), count + 1);
	Mutalisk(max(scv1HP - 3, 0), max(scv2HP - 9, 0), max(scv3HP - 1, 0), count + 1);
	Mutalisk(max(scv1HP - 1, 0), max(scv2HP - 9, 0), max(scv3HP - 3, 0), count + 1);
	Mutalisk(max(scv1HP - 3, 0), max(scv2HP - 1, 0), max(scv3HP - 9, 0), count + 1);
	Mutalisk(max(scv1HP - 1, 0), max(scv2HP - 3, 0), max(scv3HP - 9, 0), count + 1);
	return;
}
int main() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> SCVHP[i];
	}
	
	memset(SCV, MAX, sizeof(SCV));;
	Mutalisk(SCVHP[0], SCVHP[1], SCVHP[2], 0);
	cout << SCV[0][0][0] << endl ;
	return 0;
}

'문제풀이 > 백준' 카테고리의 다른 글

[C++]백준 1708 - 볼록 껍질  (0) 2022.03.15
[C++]백준 14226 - 이모티콘  (0) 2022.01.11
[C++]백준 2481 - 데스노트  (0) 2022.01.10
[C++]백준 11559 - Puyo Puyo  (0) 2022.01.09
[C++]백준 14238 - 출근 기록  (0) 2022.01.04