mini notes

競技プログラミングの解法メモを残していきます。

yukicoder No.951 【本日限定】1枚頼むともう1枚無料!(★3)

問題:No.951 【本日限定】1枚頼むともう1枚無料! - yukicoder

解答:#472788 (C++14) No.951 【本日限定】1枚頼むともう1枚無料! - yukicoder

解法:
dp[i][j][l] := i番目のピザまでで、所持金がj円であるときの美味しさの最大値、l=[0/1]なら無料ピザが[ない/ある]状態 とする。ただし、ピザはコストが大きい順、美味しさが大きい順に並べておく。

遷移は①何もしない ②ピザを購入(無料ピザがない状態だけ) ③無料ピザをもらう(無料ピザがある状態だけ) の3種類。

初めに組んだ時は「購入したピザの次のピザを無料ピザにする」のような解法を考えていた。これは正しくないです。(ピザが3枚で、一番高いピザと一番安いピザをもらうのが最適の場合など) 一応その時の提出です。
#472787 (C++14) No.951 【本日限定】1枚頼むともう1枚無料! - yukicoder