สมมุติว่าเรามีความกว้างและความสูงเท่ากับ N รูปสี่เหลี่ยมผืนผ้า เราต้องหาจำนวนสี่เหลี่ยมขั้นต่ำที่เหลือหลังจากใส่เข้าไปในอีกอัน ดังนั้น ถ้า W1 และ W2 เป็นความกว้างของสี่เหลี่ยม R1 และ R2 ตามลำดับ และ H1 และ H2 เป็นความสูงของ R1 และ R2 ตามลำดับ ดังนั้นหาก W1
ดังนั้น หากอินพุตเป็น {{ 30, 45 }, { 15, 15 }, { 45, 30 },{60, 75 }} ผลลัพธ์จะเป็น 2 เนื่องจากหนึ่งในวิธีที่เป็นไปได้คือการแทรกสี่เหลี่ยมผืนผ้าที่สอง เข้าไปในอันแรกแล้วแทรกสี่เหลี่ยมนั้นเข้าไปในอันที่สี่ เหลือสี่เหลี่ยมที่สามและสี่
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n :=ขนาดของกล่อง
จัดเรียงกล่องอาร์เรย์ตามขนาด
กำหนดอาร์เรย์ที่ซ้อนกันของคู่
แทรกกล่อง[n - 1] ที่ส่วนท้ายของการซ้อน
สำหรับการเริ่มต้น i :=n - 2 เมื่อ i>=0, อัปเดต (ลด i โดย 1) ให้ทำ -
ขวา :=ขนาดของซ้อน
ขณะที่ซ้าย <=ขวา ทำ:
กลาง :=(ขวา + ซ้าย) / 2
ถ้าความสูงของ nested[mid] เท่ากับความสูงของ box[i] หรือ width of nested[mid] <=width of boxes[i] แล้ว −
ซ้าย :=กลาง + 1
มิฉะนั้น
ขวา :=กลาง - 1
ถ้าเหลือเท่ากับขนาดของซ้อนกันแล้ว −
แทรกกล่อง[i] ที่ส่วนท้ายของการซ้อน
มิฉะนั้น
ความกว้างของซ้อน[ซ้าย] :=ความกว้างของกล่อง[i]
ความสูงของซ้อน[ซ้าย] :=ความสูงของกล่อง[i]
ส่งคืนขนาดที่ซ้อนกัน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include
อินพุต
<ก่อน>{{30, 45}, {15,15}, {45,30},{60,75}} ผลลัพธ์
2