https://coderun.yandex.ru/problem/buying-tickets/description Средняя

Решение

import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.BufferedWriter
import java.io.OutputStreamWriter
import kotlin.math.min

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val n = reader.readLine()!!.toInt()

    if (n == 0) {
        writer.write("0\\n")
        writer.close()
        reader.close()
        return
    }

    val a = IntArray(n + 1)
    val b = IntArray(n + 1)
    val c = IntArray(n + 1)

    for (i in 1..n) {
        val parts = reader.readLine()!!.trim().split(" ").map { it.toInt() }
        a[i] = parts[0]
        b[i] = parts[1]
        c[i] = parts[2]
    }

    val dp = LongArray(n + 1)

    dp[0] = 0L

    for (i in 1..n) {
        dp[i] = dp[i - 1] + a[i]

        if (i >= 2) {
            val timeOption2 = dp[i - 2] + b[i - 1]
            dp[i] = min(dp[i], timeOption2)
        }

        if (i >= 3) {
            val timeOption3 = dp[i - 3] + c[i - 2]
            dp[i] = min(dp[i], timeOption3)
        }
    }

    writer.write(dp[n].toString())
    writer.newLine()

    reader.close()
    writer.close()
}