JOI '11 本選 B - 古本屋 bitDP解法

解説することはあんまりないです.
問題リンク? B - 古本屋 (Books)

解法

各ジャンルについて, i 個売るときの買取価格の最大値は貪欲法で求まります.したがって, dp_{i j} を(既に0冊以上売却したジャンルの集合が i,売却した総冊数が j のときの買取価格の最大値)とすれば,bitDP によって答えを求めることができます.時間計算量はジャンルの種類数を \sigma とすると \mathrm{O}(N \log{N} + \sigma 2^{\sigma} N) となり, \sigma=10 なので定数倍に気を付けると AC できます.ちなみに,std::vectorを使うと TLE になります.

Submission #60653147 - 第10回日本情報オリンピック 本選(過去問)