問題はこちら
問題概要
買い取り価格円の本が冊与えられる. 本にはそれぞれジャンルのジャンルが決まっていて同ジャンルの本を冊売ると, そのジャンルの本の買い取り価格が冊につき円上がる. 冊の本から冊選んで売るときの最大買い取り価格を答えよ.
思考の流れ
同じジャンルの本を売るときは高いものから売るというのはすぐにわかる. 各ジャンルについていくつ売るかを決めると価格は決まるので, 売る数を探索したくなるが, 数が多すぎて無理.
あるジャンルの本を冊売ると決めると, その買い取り価格は (はそのジャンルの買い取り価格が高い冊の買い取り価格の合計)となるので, 各ジャンルに対して「冊売るときの買い取り価格の最大値」を求めておく. これを
売る本の数=重さ
買い取り価格=価値
とみるとナップサック問題と考えることができる. ただし, ナップサック問題とは違い各ジャンル一つしか選ぶことができないという条件に注意する.
提出プログラム
https://atcoder.jp/contests/joi2011ho/submissions/12055372
感想
高いものから売るっていうのはすぐわかったけど, ナップサック問題に落とし込むのを思い付かなかった. こういうナップサック問題の使い方があるのか. 競技プログラミングは奥が深い.