728x90
코드
import java.util.*
private val dp = Array(21) { Array(21) { IntArray(21)} }
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
while (true) {
val a = sc.nextInt()
val b = sc.nextInt()
val c = sc.nextInt()
if (a == -1 && b == -1 && c == -1) {
break
}
val result = w(a, b, c)
println("w($a, $b, $c) = $result")
}
}
private fun w(a: Int, b: Int, c: Int): Int {
when {
a <= 0 || b <= 0 || c <= 0 -> {
return 1
}
a > 20 || b > 20 || c > 20 -> {
dp[20][20][20] = w(20, 20, 20)
return dp[20][20][20]
}
b in (a + 1) until c -> {
if (dp[a][b][c] != 0) {
return dp[a][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 -> {
if (dp[a][b][c] != 0) {
return dp[a][b][c]
}
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]
}
}
}
728x90
'알고리즘' 카테고리의 다른 글
[백준][KOTLIN] 9461 파도반 수열 (0) | 2021.12.09 |
---|---|
[백준][KOTLIN] 1904 01타일 (0) | 2021.12.09 |
[백준][KOTLIN] 1003 피보나치 함수 (0) | 2021.12.08 |
[백준][KOTLIN] 18870 좌표 압축 (0) | 2021.12.08 |
[백준][KOTLIN] 10814 나이순 정렬 (0) | 2021.12.07 |