codevs 1063 合併果子

2021-07-27 21:54:24 字數 849 閱讀 1013

中午一看到這題,馬上想起了能量項鍊的那個模型,即區間型的dp,完全沒有注意到n的範圍,犯了先入為主的錯誤

下午回到學校馬上就去寫這個幾乎是模板的**,提交直接mle,才發現n的最大值為10000,dp[n][n】的大小為 10000 * 10000 * 4 bytes(乙個int為32 = 4 * 9 bits,即4個位元組)= 400 000 kb > 題目要求的128 000kb, 因為平時我敲演算法之前都沒有去考慮一下這個空間複雜度是否可行,記下這次的錯誤,以後寫演算法之前要堅持先分析時間複雜度,空間複雜度,並注釋在行首,以此來提醒自己思考:這個演算法在要求的時間和空間下是否可以滿足需求。

那麼在傳統的區間型dp無法解決的情況下,我又嘗試了乙個錯誤的方法,錯誤原因是沒有考慮到 a , b ,c ,d可能是ab ,cd 劃分的,並不是每次只處理1,n這樣的。然後發現還有要用區間來得到乙個dp的數值才行,所以陷入了思維困境。然後再翻翻stl,有沒有什麼資料結構可以用2個元素定位乙個數,然後用完一輪之後再清掉呢?似乎也找不到。於是去看了題解。

看了題解之後我發現自己真的崩了。題目其實並沒有說明一定要相鄰的2堆果子才能合併在一起,只是我自己一看到合併就想起了那個區間動態的模型。所以這是我自己犯下的乙個大錯,需要好好反思!

所以其實直接貪心,用乙個優先順序佇列即可,在這裡自己陌生的知識點總結如下:

優先佇列預設的是資料大的優先順序高, 標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係

priority_queuepq;

為了使得越小優先順序越高(比如本題),用法應為

priority_queue, greater>pq;

第二個引數為容器型別。

第二個引數為比較函式。

Codevs 1063 合併果子

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond description 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,...

codevs 1063 合併果子

1063 合併果子 2004年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond description 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合...

codevs 1063 合併果子

2004年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。...