def main
(args
: Array
[String
]): Unit
= { val sum
= BigDecimal
(Console.
readLine()).
*(100).
toIntExact val unitPrices
= (0 until
3).
map(_ => BigDecimal
(Console.
readLine()).
*(100).
toIntExact).
filter(_ != 0) val dynArray
= Array.
ofDim[Int
](unitPrices.
length, sum +
1) dynArray.foreach(row => row.indices.foreach(row(_) = -1))
dynArray.foreach(_(0) = 0)
for (((row, rowIndex
), unitPrice
) <- dynArray.
zipWithIndex.
zip(unitPrices
); elemIndex <- row.indices) {
if (elemIndex
>= unitPrice
) { val leftElem
= row
(elemIndex - unitPrice
) row(elemIndex) = leftElem + 1
}
}
val prevElem
= dynArray
(rowIndex -
1)(elemIndex
) if (row
(elemIndex
) < 0 ||
(prevElem
> 0 && prevElem
< row
(elemIndex
))) { row(elemIndex) = dynArray(rowIndex - 1)(elemIndex)
}
}
}
val counts
= (0 until unitPrices.
length).
map(_ => 0).
toArray var row
= unitPrices.
length -
1 while (col
> 0 && dynArray
(row
)(col
) >= 0) { val elem
= dynArray
(row
)(col
) if (row
> 0 && elem
== dynArray
(row -
1)(col
)) { row -= 1
} else if (col
>= unitPrices
(row
) && elem
== dynArray
(row
)(col - unitPrices
(row
)) +
1) { counts(row) += 1
col -= unitPrices(row)
}
}
print(s"$sum = ")
println
(counts.
zipWithIndex.
map{case(count, index
) => s
"$count * ${unitPrices(index)}"}.
mkString(" + ")) }
}
b2JqZWN0IE1haW4gewoKICBkZWYgbWFpbihhcmdzOiBBcnJheVtTdHJpbmddKTogVW5pdCA9IHsKICAgIHZhbCBzdW0gPSBCaWdEZWNpbWFsKENvbnNvbGUucmVhZExpbmUoKSkuKigxMDApLnRvSW50RXhhY3QKICAgIHZhbCB1bml0UHJpY2VzID0gKDAgdW50aWwgMykubWFwKF8gPT4gQmlnRGVjaW1hbChDb25zb2xlLnJlYWRMaW5lKCkpLiooMTAwKS50b0ludEV4YWN0KS5maWx0ZXIoXyAhPSAwKQogICAgdmFsIGR5bkFycmF5ID0gQXJyYXkub2ZEaW1bSW50XSh1bml0UHJpY2VzLmxlbmd0aCwgc3VtICsgMSkKICAgIGR5bkFycmF5LmZvcmVhY2gocm93ID0+IHJvdy5pbmRpY2VzLmZvcmVhY2gocm93KF8pID0gLTEpKQogICAgZHluQXJyYXkuZm9yZWFjaChfKDApID0gMCkKICAgIGZvciAoKChyb3csIHJvd0luZGV4KSwgdW5pdFByaWNlKSA8LSBkeW5BcnJheS56aXBXaXRoSW5kZXguemlwKHVuaXRQcmljZXMpOwogICAgICAgICAgZWxlbUluZGV4IDwtIHJvdy5pbmRpY2VzKSB7CiAgICAgIGlmIChlbGVtSW5kZXggPj0gdW5pdFByaWNlKSB7CiAgICAgICAgdmFsIGxlZnRFbGVtID0gcm93KGVsZW1JbmRleCAtIHVuaXRQcmljZSkKICAgICAgICBpZiAobGVmdEVsZW0gPj0gMCkgewogICAgICAgICAgcm93KGVsZW1JbmRleCkgPSBsZWZ0RWxlbSArIDEKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHJvd0luZGV4ID4gMCkgewogICAgICAgIHZhbCBwcmV2RWxlbSA9IGR5bkFycmF5KHJvd0luZGV4IC0gMSkoZWxlbUluZGV4KQogICAgICAgIGlmIChyb3coZWxlbUluZGV4KSA8IDAgfHwgKHByZXZFbGVtID4gMCAmJiBwcmV2RWxlbSA8IHJvdyhlbGVtSW5kZXgpKSkgewogICAgICAgICAgcm93KGVsZW1JbmRleCkgPSBkeW5BcnJheShyb3dJbmRleCAtIDEpKGVsZW1JbmRleCkKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHZhbCBjb3VudHMgPSAoMCB1bnRpbCB1bml0UHJpY2VzLmxlbmd0aCkubWFwKF8gPT4gMCkudG9BcnJheQogICAgdmFyIHJvdyA9IHVuaXRQcmljZXMubGVuZ3RoIC0gMQogICAgdmFyIGNvbCA9IHN1bQogICAgd2hpbGUgKGNvbCA+IDAgJiYgZHluQXJyYXkocm93KShjb2wpID49IDApIHsKICAgICAgdmFsIGVsZW0gPSBkeW5BcnJheShyb3cpKGNvbCkKICAgICAgaWYgKHJvdyA+IDAgJiYgZWxlbSA9PSBkeW5BcnJheShyb3cgLSAxKShjb2wpKSB7CiAgICAgICAgcm93IC09IDEKICAgICAgfSBlbHNlIGlmIChjb2wgPj0gdW5pdFByaWNlcyhyb3cpICYmIGVsZW0gPT0gZHluQXJyYXkocm93KShjb2wgLSB1bml0UHJpY2VzKHJvdykpICsgMSkgewogICAgICAgIGNvdW50cyhyb3cpICs9IDEKICAgICAgICBjb2wgLT0gdW5pdFByaWNlcyhyb3cpCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yCiAgICAgIH0KICAgIH0KICAgIHByaW50KHMiJHN1bSA9ICIpCiAgICBwcmludGxuKGNvdW50cy56aXBXaXRoSW5kZXgubWFwe2Nhc2UoY291bnQsIGluZGV4KSA9PiBzIiRjb3VudCAqICR7dW5pdFByaWNlcyhpbmRleCl9In0ubWtTdHJpbmcoIiArICIpKQogIH0KfQo=