解説
この問題は、いわゆる「ナップザック問題」の類題です。以下のような二次元動的計画法(DP)を考えます。
dp[i][j]= i種類目までの料理を見て、合計コストが j のときの最大幸福度
ここで、i番目の料理の値段を ci、幸福度を hi とします。
DPの遷移
初期化
dp[0][0]=0
最終的な答え
0≤j≤Cmaxdp[N+1][j]
計算量
- 時間計算量:O(NC)
- 制約条件の範囲内で十分高速に処理可能です。
このようにして、問題を効率的に解くことができます。(この解説はCopilotを利用して記述しています。)