UPC 6206 YLB搭積木 模擬小島下沉

2021-08-17 18:03:57 字數 1292 閱讀 4343

題目描述

lcyz舉辦了一年一度的「積木大賽」。今年比賽的內容是搭建一座寬度為n的大廈,大廈可以看成由n塊寬度為1的積木組成,第i塊積木的最終高度需要是hi。

在搭建開始之前,沒有任何積木(可以看成n塊高度為0的積木)。接下來每次操作,小朋友們可以選擇一段連續區間[l,r],然後將第第l塊到第r塊之間(含第l塊和第r塊)所有積木的高度分別增加1。

ylb是個智障的小朋友,他想不出使得建造所需的操作次數最少的最佳策略。所以想請你幫他想出這個策略,並求出最少的操作次數。

輸入 輸入包含兩行,第一行包含乙個整數n,表示大廈的寬度。

第二行包含n個整數,第i個整數為hi 。

輸出 僅一行,即建造所需的最少運算元。

樣例輸入

5 2 3 4 1 2

樣例輸出

5 提示

其中一種可行的最佳方案,依次選擇

[1,5] [1,3] [2,3] [3,3] [5,5]

【資料範圍】

對於 30%的資料,有1 ≤ n ≤ 10;

對於 70%的資料,有1 ≤ n ≤ 1000;

對於 100%的資料,有1 ≤ n ≤ 100000,0 ≤ hi≤ 10000。

寫這道題的時候突然想起來自己以前寫過乙個uvalive的水題,說的是小島下沉,這題做法大概也差不多,當時的資料特別小,只有12,沒錯,按這題的說法來說寬度僅有12,在此題中已經達到了15000,那麼當時的做法在現在是否可取呢? 我嘗試找到了那時的**,做了些修改。果然能用,雖然暴力了些,但是模擬的姿勢還是很漂亮的。

總的思路就是拿這個高樓的最終高度,做相反的操作,他問多少操作能提公升至輸入高度,那麼就拿輸入高度按操作往下降。每次降高度最低的位置的高度,將每一層沉到位置0。這些最小高度即操作次數累加和。

首先最外層while作為乙個重複下沉的迴圈,當我做了一遍下沉後,檢查是否還有高樓存在高度,有的話繼續下沉,判斷條件就是很暴力的檢查陣列每乙個座標是否有高度。

第二層迴圈對寬度做乙個遍歷,我們將左右為0高度的一整塊位置看做乙個模組,當遍歷到0位置時,將0位置之前的模組做最低高度下沉,然後遍歷下乙個模組,也就說我們將0高度作為乙個模組的開始和結束表示,利用這個標誌記錄模組開始和結束的座標。並在模組範圍內查詢最低高度,然後整體下降。

#include

#define ll long long

int n,a[100005];

bool check()

int main()

i++;}}

printf("%lld\n",ans);

}}

6 20培訓記錄

1.命名規則 私有變數前面加 公有的大寫 集合類的 可以使用複數 或者 增加 list結尾 2.物件的初始化,放在bll層的 setinitial 方法裡 uconfig的初始化 一些屬性的必填什麼的驗證,寫在vailitly什麼的方法裡 3.頁面 盡量的乾淨,整潔 一些 可以放到service和b...

創新實訓6 20

整理之前寫好的 結構,正式開始我們的專案 flaskenv test watchlist.py watchlist 程式包 其他自己的js檔案 templates base.html edit.html errors 400.html 404.html 500.html index.html log...

620 有趣的電影

某城市開了一家新的電影院,吸引了很多人過來看電影。該電影院特別注意使用者體驗,專門有個 led顯示板做電影推薦,上面公布著影評和相關電影描述。作為該電影院的資訊部主管,您需要編寫乙個 sql查詢,找出所有影片描述為非 boring 不無聊 的並且 id 為奇數 的影片,結果請按等級 rating 排...