時間限制: 1000 ms 空間限制: 262144 kb
題目描述
社會實踐是小學教育的重要組成部分,也是素質教育的乙個重要環節,老師經常帶同學們到工廠車間去參觀。一天,在班主任的帶領下,小明和他的同學來到了一間生產箱子的工廠,在工廠的倉庫裡有許多箱子,這些箱子被排成單獨的一行,每個箱子都有乙個體積,箱子的體積不大於1000個單位體積,體積小的可以放到體積大的箱子裡面。倉庫的經理想把一些箱子放進另一些箱子裡面,以便使得左端有更多連續的空餘位置。
基於安全因素的考慮,乙個箱子最多能夠裝下乙個比它小的箱子,並且只能嘗試將左端的前k個箱子裝入與之相鄰的k(即k+1~2*k之間)個箱子中。
你的任務是幫助經理計算一下,在滿足安全因素的情況下,左端有多少個箱子可以裝入與之相鄰的箱子中。
輸入第一行為乙個整數n,表示箱子的總個數。第二行是n個整數,表示這n個箱子的尺寸。
輸出乙個整數,表示左邊有多少個箱子可以裝入與之相鄰的箱子中,即題目中的最大的k值。
樣例輸入
102 2 1 4 3 2 5 4 2 3
樣例輸出
資料範圍限制
60%的資料n<=300
100%的資料n<=3000
提示前4個箱子可以放入5~8個箱子中。 其中一種放法為,第1箱子裝入第5個箱子中,第2個箱子裝入第8個箱子中,第3個箱子裝入第6個箱子中,第4個箱子裝入第7個箱子中,這樣左邊最多可以空出4個箱子位置,除此之外,沒有其它方式能使左邊空出更多的位置。
思路:我們需要看懂這個題目,這個題目的意思就是讓我們盡可能的騰出左邊的空間(注意,是左邊,不是右邊也不是中間)。如果還是有點不明白題意,那麼我們再結合提示分析樣例。
相信大家看完提示就可以明白題目的意思了,畢竟提示已經寫得很清楚了。
接下來簡單的想一想題目的做法,我們需要先一組一組試,怎麼試呢?這個問題我們先放在一邊,待會再解決。
現在我們需要解決乙個問題,我們一組一組指的是什麼呢?怎麼樣一組一組的迴圈呢?這個問題很簡單,我們需要分半,這可不是分半查詢,而是比如說n=8,那我們先試試將前八個分半試試能不能全部裝進去,然後再試試前六個分半,然後再試試前四個分半,再試試前兩個分半,以此類推。
我們現在知道了怎麼迴圈,那我們接下來需要解決的就是怎麼試。
怎麼試呢?我們需要先考慮個問題,相信大家第乙個想法肯定都是雙層迴圈吧,可是要考慮一下啊,雖是雙層迴圈,但是別忘了我們外面還有一層迴圈啊,也就是說有三層迴圈,還是有可能會超時的。
所以我們只能考慮單層迴圈的方法了,我們想想啊,我們是不是可以先排序,然後再用兩個變數乙個迴圈。但這樣對不對呢?很遺憾,不對,因為你如果排了序,那麼就會改變原有的序列,也就是說,第一次試它的序列順序是沒問題的,再往後數列就不一樣了,這樣答案也就不一樣了。
所以說我們不能修改原數列,必須給它找個「替身」,也就是說,我們需要複製一遍這個數列,然後再改變。
想到這裡,想必大家都明白了怎麼寫了吧,接下來,話不多說,上超全注釋**↓
#include
using
namespace std;
int n,k[
3001
],k1[
3001];
//箱子數量、k陣列、k陣列的「替身」
intmain()
if(n%2==
1)for(
int i=n/
2;i>=
1;i--
)sort
(k1+
1,k1+i+1)
;//排序
sort
(k1+i+
1,k1+i*2+
1);//排序
int g=
1,s=i*2;
//g是兩個變數中的乙個,s是檢視當前數列中的數字數量的
for(
int j=i+
1;j<=i*
2;j++
) s--
;//代表右邊的箱子數量減一 }if
(s==0)
} cout<<0;
//如果實在沒有辦法的話輸出0
}
裝箱問題 (洛谷題目)
題目描述 題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入 第一行是乙個整數v,表示箱子容量。第二行是乙個整數n,表示物品數。接下來n行,每行乙個正整數 不超過1000...
問題A 裝箱問題
思路 思路 根據演算法筆記上01揹包問題的一維形式改編,就僅僅是把每件物品的價值改為1,再未做其他修改,後來發現不行 const int maxn 1001 int dp maxn int w maxn int main for int i 0 i參照別人的答案,進行的思考 首先,狀態轉移方程 dp...
pta基本題目集 裝箱問題 (20 分)
7 32 裝箱問題 20 分 假設有n項物品,大小分別為s 1 s 2 s i s n 其中s i 為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,...