관리 메뉴

기억을 위한 기록들

[백준 9184: 신나는 함수 실행] - C++ 본문

Coding Test - cpp/DP

[백준 9184: 신나는 함수 실행] - C++

에드윈H 2021. 2. 2. 15:32

www.acmicpc.net/problem/9184

 

9184번: 신나는 함수 실행

입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.

www.acmicpc.net

#include <iostream>
#include <string.h>

using namespace std;

int cache[51][51][51];
int w(int a, int b, int c){


	if (a <= 0 || b <= 0 || c <= 0) {
		return 1;
	}

	int& result = cache[a][b][c];

	if (result != -1) {
		return result;
	}




	if (a >= 21 || b >= 21 || c >= 21)
		return w(20, 20, 20);


	if (a < b && b < c)
	{
		result = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
	}
	else 
	{
		result = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
	}

	return result;
}

int main() {

	int a, b, c;
	int n = 0;

	memset(cache, -1, sizeof(cache));
	while (1)
	{

		cin >> a >> b >> c;

		if (a == -1 && b == -1 && c == -1)
			break;

		n = w(a, b, c);

		cout << "w(" << a << ", " << b << ", " << c << ") = " << n << '\n';
	}

	return 0;
}//end of main


'Coding Test - cpp > DP' 카테고리의 다른 글

[백준 2156: 포도주 시식] - C++  (0) 2021.02.05
[백준 1904: 01타일] - C++  (0) 2021.02.02
[백준 9461: 파도반 수열] - C++  (0) 2021.02.02
[백준 1912: 연속합] - C++  (0) 2021.01.22
[백준 9625: BABBA ] - C++  (0) 2021.01.20