개발 관련 공부/알고리즘
백준 9184
슴새
2021. 8. 6. 17:20
반응형
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(true) {
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
if(a==-1&&b==-1&&c==-1) break;
int res;
try {
res=w(a,b,c);
}catch(Exception e){
res=1;
}
System.out.println("w("+a+", "+b+", "+c+") = "+res);
}
}
static int dp[][][] = new int[51][51][51];
static int w(int a, int b, int c) {
// 이미 계산되어 저장되어있는 경우 해당 값을 반환
if(dp[a][b][c] != 0) {
return dp[a][b][c];
}
else if(a <= 0 || b <= 0 || c <= 0) {
return 1;
}
else if(a > 20 || b > 20 || c > 20) {
return dp[20][20][20] = w(20, 20, 20);
}
else if(a < b && b < c) {
dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
return dp[a][b][c];
}
else{
dp[a][b][c]=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 dp[a][b][c];
}
}
}
반응형