fork(5) download
  1. object Main extends App {
  2. val cash = Map(
  3. 5000 -> 0,
  4. 2000 -> 0,
  5. 1000 -> 1,
  6. 500 -> 100,
  7. 200 -> 4,
  8. 100 -> 0)
  9. val need = readLine.toInt
  10.  
  11. def yoba(n: Int, cash: List[Int]) = {
  12. def mali_yoba(n: Int, a: List[Int], v: List[Int]): Stream[List[Int]] =
  13. if (a.isEmpty) Stream()
  14. else n compare 0 match {
  15. case 0 => Stream(v)
  16. case -1 => Stream()
  17. case 1 => mali_yoba(n - a.head, a.tail, v :+ a.head) #::: mali_yoba(n, a.tail, v)
  18. }
  19. mali_yoba(n, cash, List())
  20. }
  21.  
  22. val money = (cash.toList flatMap { case (v, c) => List.make(Math.min(c, need/v), v) }) :+ 0 sortWith (_ > _)
  23. println(yoba(need, money).headOption.getOrElse(List()).mkString(" + "))
  24. }
Success #stdin #stdout 0.47s 382080KB
stdin
1600
stdout
1000 + 200 + 200 + 200