AtCoder Beginner Contest 204 D問題 [ D - Cooking ] をPythonで解いてみる。割り算の切り上げ間違いにハマる(正解率33.67%)
問題概要
N 個の料理があり,それぞれ作るためにオーブンを使う時間はTiである。2つのオーブンを用いてすべての料理を作るのにかかる時間は最短何分か。
1≤N≤100
0≤Ti≤103
実装方針
公式解説の説明がわかりやすい。
2つのオーブンのどちらに割り当てるかによって料理を 2つの集合に分けることを考えると、問題は「N品の料理を 2つの集合に分け、それぞれ作るのにかかる時間の合計の最大値を最小化せよ」と読み替えることが出来ます。
DPで部分和問題として解く
「T1,…,TNからいくつか選んだ和であって、全Tの合計値/2以上の最小値は?」という方針で、部分和の問題として解く。
DPの部分和を解くコードが、そのまま適応できる。
最初書いたコードの答えを求めるパートの「全Tの合計値/2以上の最小値」の割り算計算が間違っててハマり。
int(TMAX // 2)+1
と書いたが、これだと割り切れる場合にも1足されてしまう。
math.ceil(TMAX/2)
でAC。
はまやんさんのCコードをPythonにコンバートしたコード
あと、はまやんさんの解説にのってるCコードをPythonに書きかえたモノも書いたので、のせておきます。
D - Cookingの正解率
2970 / 8819 = 33.67%
結構、答えられてるよなー。
みんな良くわかるな。