ในปัญหานี้ เราได้รับค่าจำนวนเต็มสามค่า W, n, m ซึ่งแสดงถึงความยาวของผนัง W ขนาดของชั้นวาง n และ m งานของเราคือ สร้างโปรแกรมเพื่อแก้ปัญหาชั้นวางที่เหมาะสม .
เราจำเป็นต้องหาวิธีจัดวางชั้นวางให้พอดีเพื่อให้มีพื้นที่เหลือสำหรับชั้นวางหลังการจัดวางให้เหลือน้อยที่สุด ข้อจำกัดรองขณะแก้ไขคือต้นทุนในการผลิต ชั้นวางขนาดใหญ่จะคุ้มค่ากว่า ดังนั้นเราจึงต้องให้ความสำคัญเป็นอันดับแรก
ผลลัพธ์ควรอยู่ในรูปแบบต่อไปนี้
จำนวนชั้น n ชั้น จำนวน ชั้น ขนาด m พื้นที่ว่าง
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input: W = 12, n = 5, m = 3 Output: 0 4 0
คำอธิบาย
ในที่นี้ เราจะใส่ชั้นวางขนาด 4, 3 ชั้นในผนังได้พอดี
ซึ่งจะทำให้ความยาวรวม =4*3 =12
ดังนั้นความยาวในผนังจะไม่เหลือหลังจากติดตั้ง
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการใช้กำลังเดรัจฉานซึ่งก็คือการตรวจสอบชุดชั้นวางที่เหมาะสมในผนังและหาชั้นวางที่ลดหรือขจัดความยาวของพื้นที่ในผนัง สำหรับงานรอง เราจะเริ่มด้วยการใส่หมัดชั้นที่ยาวกว่าให้พอดี ซึ่งจะให้ความสำคัญกับงานชิ้นที่ใหญ่กว่า เราจะดูว่าชุดค่าผสมใดให้ผลลัพธ์ขั้นต่ำกับชั้นวางขนาดใหญ่สูงสุดที่เป็นไปได้สำหรับโซลูชันที่เหมาะสมที่สุด
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h> using namespace std; void solveFittingShelves(int wall, int m, int n){ int numM = 0, numN = 0, minSpaceLeft = wall; int p = wall/m, q = 0, rem = wall%m; numM = p; numN = q; minSpaceLeft = rem; while (wall >= n) { q += 1; wall = wall - n; p = wall / m; rem = wall % m; if (rem <= minSpaceLeft) { numM = p; numN = q; minSpaceLeft = rem; } } cout<<numM<<" "<<numN<<" "<<minSpaceLeft<<endl; } int main(){ int W = 29, m = 3, n = 9; cout<<"Length of wall : "<<W<<endl; cout<<"Length of shelves : "<<m<<"\t"<<n<<endl; cout<<"Optimal Shelves fitting : "; solveFittingShelves(W, m, n); return 0; }
ผลลัพธ์
Length of wall : 29 Length of shelves : 3 9 Optimal Shelves fitting : 0 3 2