NOIP2012模擬10 25 剪草

2022-05-16 22:34:37 字數 1080 閱讀 2708

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

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

(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。

乙個整數,最早完成時刻或-1。

7 33

5 1 6 5 8 4 7

2 1 1 1 4 3 2

這題考場沒時間想。。。(在剛第一題&第三題ing。。。)

在聽完講解以後,發現水法原來也可以過的。。。

但我這種人怎麼可能打水法呢?

所以就打了個dp。(0ms嘻嘻)

首先,我們可以證明出每一棵草最多見剪一次,剪兩次就不是最優的了。

發現講題人的dpf[i][j][k]可以優化一下。

我們設f[i][j]表示當前到第i棵草,剪了j棵草(都是前i棵)所能剪掉的最大高度。

轉移方程就更容易想了:

先預處理出f陣列,然後我們只需要暴力掃一遍時間並判斷即可。

#include

#include

using namespace std;

struct nodea[51]

;int n,h,s=

0,ss=

0,f[51]

[51];

inline

intread()

intcmp

(node x,node y)

intmain()

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...

NOIP2012模擬10 25 剪草

首先分析的出兩個結論,1 每棵草最多隻剪一次 2 按照生長速度,先剪小的,再剪大的。不難證明,略。那麼把小草按生長速度從大到小排個序後,設f i,j 表示,在倒數第i個時刻,已經處理了j棵草時的最小高度和。轉移為f i j min f i j 1 f i 1 j 1 a j g a ns i 1 a...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 xx.50...