Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*
- fun main() {
- val sc = Scanner(System.`in`)
- val n = sc.nextInt()
- val arr = Array(n) { IntArray(3) }
- for (i in 0 until n) {
- for (j in 0..2)
- arr[i][j] = sc.nextInt()
- }
- println(findMaxHappiness(arr, n))
- }
- var dp = Array(1001) { IntArray(3) }
- fun findMaxHappiness(arr: Array<IntArray>, n: Int): Int {
- for (i in 0..1000)
- for (j in 0..2)
- dp[i][j] = -1
- return Math.max(func(n, 0, arr), Math.max(func(n, 1, arr), func(n, 2, arr)))
- }
- fun func(n: Int, last: Int, arr: Array<IntArray>): Int {
- if (n == 0) return 0
- if (dp[n][last] != -1)
- return dp[n][last]
- return when (last) {
- 0 -> Math.max(func(n - 1, 1, arr) + arr[n - 1][1], func(n - 1, 2, arr) + arr[n - 1][2]).also {
- dp[n][last] = it
- }
- 1 -> Math.max(func(n - 1, 0, arr) + arr[n - 1][0], func(n - 1, 2, arr) + arr[n - 1][2]).also {
- dp[n][last] = it
- }
- else -> Math.max(func(n - 1, 0, arr) + arr[n - 1][0], func(n - 1, 1, arr) + arr[n - 1][1]).also {
- dp[n][last] = it
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement