[白俊]9184号
残りの
#include <iostream>
#include <vector>
int a, b, c;
int dp[21][21][21]; // 각 row의 0번째 column은 사용 x (a,b,c가 0보다크고 20이하인 경우만을 다룰 것이기에)
// [a][b][c]
int w(int a, int b, int c)
{
// 문제 상, dp가 갖는 값은 0이 아닌 값.(확인해봐야함)
if (a <= 0 | b <= 0 | c <= 0) return 1;
else if (a > 20 | b > 20 | c > 20) return w(20,20,20);
else if (dp[a][b][c]) return dp[a][b][c]; // 이곳에 위치하지 않으면 런타임 에러. dp배열은 0<a,b,c<=20 까지만을 다루고 있기 때문.
else if (a < b & b < c) return (w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c));
else return (w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1));
}
int main()
{
int i, j, k,cnt=1;
for (int i = 1; i < 21; i++) {
for (j = 1; j < 21; j++) {
for (k = 1; k < 21; k++) {
dp[i][j][k] = w(i, j, k);
}
}
}
//a = 50, b = 50, c = 50;
//printf("w(%d, %d, %d) = %d\n", a, b, c, w(a,b,c));
///*
std::cin >> a >> b >> c;
while (!(a == -1 & b == -1 & c == -1))
{
printf("w(%d, %d, %d) = %d\n", a, b, c, w(a,b,c));
std::cin >> a >> b >> c;
}
//*/
}
Reference
この問題について([白俊]9184号), 我々は、より多くの情報をここで見つけました https://velog.io/@ynoolee/백준9184번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol