問題
n個の植物がある. それぞれ time[i]秒成長するのにかかる.
<p>
cost[i]をbudgetのなかから支払うと、1秒成長を早めることができる.
</p>
<p>
time, cost, budgetが与えられる. 植物を育てることのできる時間の最小値をかえせ.
</p>
方針
costを昇順にソーティング. costの低い順に時間を計算
<ul class="org-ul">
<li>
budgetがまだあるときは、total時間は加算しない.
</li>
<li>
budgetがないときは、time分 total時間を加算する.
</li>
</ul>
解答
timeとcostをインデックスをそろえながらソーティングするよい方法が思い つかなかったので、自力でソーティングアルゴリズムを実装した。
<p>
なにかよい方法はないものか。他の人の解答をみて研究することにする.
</p>
<p>
[sourcecode language="python" title="" ] class FarmvilleDiv2: def insertion_sort(self, time, cost, N): for i in range(1, N): v1 = time[i] v2 = cost[i] j = i - 1 while j >= 0 and cost[j] > v2: time[j + 1] = time[j] cost[j + 1] = cost[j] j -= 1 time[j + 1] = v1 cost[j + 1] = v2 return time, cost
</p>
<p>
def minTime(self, time, cost, budget): time = list(time) cost = list(cost) time, cost = self.insertion_sort(time, cost, len(cost))
</p>
<p>
ret = 0
</p>
<p>
for t, c in zip(time, cost): for i in range(t): if budget - c >= 0: budget -= c else: ret += 1
</p>
<p>
return ret [/sourcecode]
</p>