No.027 C

スペシャルチケットの手持ち枚数は取得できるトッピングの種類の上限を示しているだけで, 他には関係ない. スペシャルチケットの手持ち枚数が取得するトッピングの数と同じ場合はすべてのトッピングの入手時に1枚ずつスペシャルチケットを混ぜればいいし, 取得するトッピングの数が少なければ余りのスペシャルチケットを適当なトッピング取得時に混ぜればいい.

あとは典型的 DP で, 種類目までのトッピングを見たときに 枚のチケットを使って 種類のトッピングを手に入れたときの最大幸福を として,

で更新していけばいい. が答えである.

なお, をすべてメモリに置いておくと MLE の可能性があるので ごとに使い回す. また最大値は int をわずかに超えるので uintlong を使う.