結果

問題 No.115 遠足のおやつ
ユーザー noriocnorioc
提出日時 2015-09-16 21:41:03
言語 Scala(Beta)
(3.4.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,417 bytes
コンパイル時間 5,601 ms
コンパイル使用メモリ 227,656 KB
最終ジャッジ日時 2024-04-27 02:10:40
合計ジャッジ時間 6,059 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
-- [E040] Syntax Error: Main.scala:29:32 ---------------------------------------
29 |  def main(args: Array[String]) {
   |                                ^
   |                                '=' expected, but '{' found
1 error found

ソースコード

diff #

import scala.collection.mutable.ArrayBuffer
import scala.math._

object Main {
  // dp 配列から、辞書順の最小を求める
  def construct(d: Int, k: Int, dp: Array[Array[Boolean]]): List[Int] = {
    def rec(money: Int, count: Int, acc: List[Int]): List[Int] = {
      if (count == 1) {
        val ret = money :: acc
        ret.reverse
      }
      else {
        for (i <- (1 to money-1).reverse) {
          if (dp(count-1)(i)) {
            val m = money - i
            if (!acc.contains(m)) {
              return rec(money - m, count - 1, m :: acc)
            }
          }
        }
        assert(false)
        Nil
      }
    }

    rec(d, k, Nil)
  }

  def main(args: Array[String]) {
    val sc = new java.util.Scanner(System.in)
    val N, D, K = sc.nextInt

    val dp = Array.ofDim[Boolean](K+1, D+1) // [個数, 合計金額]
    dp(0)(0) = true

    for (i <- 1 to N) { // i 円のお菓子
      // i 円のお菓子は、ひとつしか購入できないので逆順でループ
      for (j <- (1 to K).reverse) { // j 個目のお菓子
        for (k <- 0 to D) { // 合計で D 円使った
          if (dp(j-1)(k) && k + i <= D) {
            dp(j)(k + i) = true
          }
        }
      }
    }

    if (dp(K)(D)) {
      // 辞書順で最小を求める
      val ans = construct(D, K, dp)
      println(ans.mkString(" "))
    }
    else {
      println(-1)
    }
  }
}
0