1. 程式人生 > >裝箱問題 (貪心水題)

裝箱問題 (貪心水題)

細節 3*3 using bsp () include %d main amp

【題目描述】

    一個工廠制造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1*1, 2*2, 3*3, 4*4, 5*5, 6*6。這些產品通常使用一個 6*6*h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。

【題目鏈接】

    http://noi.openjudge.cn/ch0406/19/

【算法】

    由於需要裝箱的產品總面積一定,則最優情況是箱子浪費面積最少。6,5,4,3所需包裹數是一定的,然後盡可能滿足2,最後在考慮1。細節要註意下,同時碼力太弱了。。。唉。。。

【代碼】

 1 #include <bits/stdc++.h>
 2
using namespace std; 3 int ans; 4 int a[7],b[4]={0,5,3,1}; 5 int main() 6 { 7 while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])!=EOF) { 8 if(!a[1]&&!a[2]&&!a[3]&&!a[4]&&!a[5]&&!a[6]) break; 9 ans=a[6
]+a[5]+a[4]+ceil(a[3]/4.0); 10 int for2=a[4]*5+b[a[3]%4]; 11 if(for2<a[2]) ans+=ceil((a[2]-for2)/9.0); //至此,2,3,4,5,6所需箱子數已經確定,故當前還能插入的1的個數可以考慮反面用總面積減去用於其它產品的面積 12 int for1=ans*36-36*a[6]-25*a[5]-16*a[4]-9*a[3]-4*a[2]; 13 if(for1<a[1]) ans+=ceil((a[1]-for1)/36.0); 14 printf("
%d\n",ans); 15 } 16 return 0; 17 }

裝箱問題 (貪心水題)