百练OJ:1017:装箱问题
題目鏈接:http://bailian.openjudge.cn/practice/1017/
分析六個型號的產品占用箱子的具體情況如下:6*6 的產品每個會占用一個完整的箱子,并且沒有空余空間;5*5 的產品每個占用一個新的箱子,并且留下11 個可以盛放1*1
的產品的空余空間;4*4 的產品每個占用一個新的箱子,并且留下5 個可以盛放2*2 的產品的空余空間;3*3 的產品情況比較復雜,首先3*3 的產品不能放在原來盛有5*5 或者4*4 的箱子中,那么必須為3*3 的產品另開新的箱子,新開的箱子數目等于3*3 的產品的數目除以4 向上取整;同時我們需要討論為3*3 的產品新開箱子時,剩余的空間可以盛放多少2*2 和1*1 的產品(這里如果有空間可以盛放2*2 的產品,我們就將它計入2*2 的空余空間,等到2*2 的產品全部裝完,如果還有2*2 的空間剩余,再將它們轉換成1*1 的剩余空間)。我們可以分情況討論為3*3 的產品打開的新箱子中剩余的空位,共為四種情況:第一種,3*3 的產品的數目正好是4 的倍數,所以沒有空余空間;第二種,3*3 的產品數目是4 的倍數加1,這時還剩5 個2*2 的空位和7 個1*1 的空位;第三種,3*3 的產品數目是4 的倍數加2,這時還剩3 個2*2 的空位和6 個1*1 的空位;第四種,3*3 的產品數目是4 的倍數加3,這時還剩1 個2*2 的空位和5 個1*1 的空位;處理完3*3 的產品,就可以比較一下剩余的2*2的空位和2*2 產品的數目,如果產品數目多,就將2*2 的空位全部填滿,再為2*2 的產品打開新箱子,同時計算新箱子中1*1 的空位,如果剩余空位多,就將2*2 的產品全部填入2*2的空位,再將剩余的2*2 的空位轉換成1*1 的空位;最后處理1*1 的產品,比較一下1*1的空位與1*1 的產品數目,如果空位多,將1*1 的產品全部填入空位,否則,先將1*1 的空位填滿,然后再為1*1 的產品打開新的箱子。
以上分析非本人原創,摘自書中;一下代碼思路完全來自書中,也可以說
代碼如下:#include <iostream>
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的百练OJ:1017:装箱问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百练OJ:2808:校门外的树
- 下一篇: 百练OJ:1028:Web Naviga