1. 程式人生 > >1510. 【普及模擬】剪草

1510. 【普及模擬】剪草

題目描述

    有N棵小草,編號0至N-1。奶牛Bessie不喜歡小草,所以Bessie要用剪刀剪草,目標是使得這N棵小草的高度總和不超過H。在第0時刻,第i棵小草的高度是h[i],接下來的每個整數時刻,會依次發生如下三個步驟:

(1)每棵小草都長高了,第i棵小草長高的高度是grow[i]。

(2)Bessie選擇其中一棵小草並把它剪平,這棵小草高度變為0。注意:這棵小草並沒有死掉,它下一秒還會生長的。

(3)Bessie計算一下這N棵小草的高度總和,如果不超過H,則完成任務,一切結束,    否則輪到下一時刻。

你的任務是計算:最早是第幾時刻,奶牛Bessie能完成它的任務?如果第0時刻就可以完成就輸出0,如果永遠不可能完成,輸出-1,否則輸出一個最早的完成時刻。

輸入

第一行,兩個整數N和H。 1 ≤ N ≤ 50,0 ≤ H ≤ 1000000。

第二行,N個整數,表示h[i]。0 ≤ h[i] ≤ 100000。

第三行,N個整數,表示grow[i]。1 ≤ grow[i] ≤ 100000。

對於20%的資料, 1  N  7。

題解

首先,想想,割草的最優方法是什麼。

每棵草只割一次。因為Bessie每一次割草,都能使這棵草的高度變為0。

所以,我們可以以草的生長速度為關鍵字做從小到大排序。