package yukicoder fun main() { val N: Int = readLine()!!.toInt() val W: List = readLine()!!.split(" ").map(String::toInt) val sum: Int = W.sum() if (sum % 2 != 0) { println("impossible") return } val halfW = sum / 2 var cache: MutableMap, Boolean> = mutableMapOf() fun search2(nokori: Int, index: Int): Boolean { val currentNokori = nokori - W[index] return when { currentNokori < 0 -> false currentNokori == 0 -> true else -> { for (i in index + 1 until N) { val key = Pair(currentNokori, i) val result = cache.get(key)?.let { it } ?: run { val result = search2(currentNokori, i) cache.put(key, result) result } if (result) { return result } } false } } } when (search2(halfW, 0)) { true -> println("possible") false -> println("impossible") } }