इस समस्या में अलग-अलग बॉक्स का एक सेट दिया गया है, अलग-अलग बॉक्स के लिए लंबाई, चौड़ाई और चौड़ाई अलग-अलग हो सकती है। हमारा काम इन बक्सों का ढेर ढूंढना है, जिनकी ऊंचाई ज्यादा से ज्यादा हो। हम अपनी इच्छानुसार किसी भी बॉक्स को घुमा सकते हैं। लेकिन बनाए रखने का एक नियम है।
कोई एक बॉक्स को दूसरे बॉक्स पर रख सकता है यदि नीचे वाले बॉक्स की ऊपरी सतह का क्षेत्रफल ऊपर वाले बॉक्स के निचले क्षेत्र से बड़ा है।
इनपुट और आउटपुट
इनपुट:बॉक्स की एक सूची दी गई है। प्रत्येक बॉक्स को (लंबाई, चौड़ाई, ऊंचाई) द्वारा दर्शाया जाता है। {(4, 6, 7), (1, 2, 3), (4, 5, 6), (10, 12, 32)} आउटपुट:अधिकतम बॉक्स स्टैक की संभावित ऊंचाई है:60
एल्गोरिदम
maxHeight(boxList, n)
इनपुट - विभिन्न बक्सों की सूची, बक्सों की संख्या।
आउटपुट - बक्सों को ढेर करके अधिकतम ऊँचाई पाई जाती है।
<पूर्व>आकार 3n के रोटेशन ऐरे रोट को परिभाषित करना शुरू करें। अनुक्रमणिका :=0 सभी बक्सों के लिए मैं, boxList में, रोट करता हूँ [index].len :=boxList[i].len Rot[index].hei :=max of boxList[i].hei और boxList[i]। ब्रे रोट [इंडेक्स]। ब्रे:=न्यूनतम बॉक्सलिस्ट [i]। हेई और बॉक्सलिस्ट [i] .ब्रे इंडेक्स:=इंडेक्स + 1 रोट [इंडेक्स]। लेन:=बॉक्सलिस्ट [i]। ब्रे रोट [इंडेक्स]। हेई :=अधिकतम बॉक्सलिस्ट [i] .len और बॉक्सलिस्ट [i]। हेई रोट [इंडेक्स]। ब्रे:=न्यूनतम बॉक्सलिस्ट [i]। लेन और बॉक्सलिस्ट [i]। हेई इंडेक्स:=इंडेक्स + 1 रोट [इंडेक्स] .len :=boxList[i].hei Rot[index].hei :=अधिकतम boxList[i].len और boxList[i].bre Rot[index].bre :=न्यूनतम boxList[i].len और boxList[i].bre अनुक्रमणिका:=अनुक्रमणिका + 1 n:=3n सड़ांध सूची को क्रमबद्ध करें i के लिए maxHeightTemp सरणी को परिभाषित करें:=1 से n-1, j के लिए करें:=0 से i-1, सड़ने पर करें [i] .breउदाहरण
#शामिल करें x :y;}int max (int x, int y) {रिटर्न (x> y)? x:y;}बूल तुलना (बॉक्स b1, बॉक्स b2) {रिटर्न b1.height> b2.height; // ऊंचाई के अवरोही क्रम के रूप में बॉक्स को सॉर्ट करने के लिए} इंट मैक्सहाइट (बॉक्स बॉक्सलिस्ट [], इंट एन) {बॉक्स रोटेशन [3 * एन]; // एक बॉक्स को 3 प्रकार के रूप में घुमाया जा सकता है, इसलिए 3n रोटेशन की संख्या है int अनुक्रमणिका =0; के लिए (int i =0; iआउटपुट
बॉक्स स्टैक की अधिकतम संभव ऊंचाई है:60