描述
乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1*1,2*2,3*3,4*4,5*5,6*6。
這些產品通常使用乙個6*6*h的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有乙個好的程式幫他們解決這個問題從而節省費用。現在這個程式由你來設計。
格式輸入格式
輸入檔案包括幾行,每一行代表乙個訂單。每個訂單裡的一行包括六個整數,中間用空格隔開,分別為1*1至6*6這六種產品的數量。輸入檔案將以6個0組成的一行結尾。
輸出格式
除了輸入的最後一行6個0以外,輸入檔案裡每一行對應著輸出檔案的一行,每一行輸出乙個整數代表對應的訂單所需的最小包裹數。
樣例輸入樣例
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
輸出樣例
2
1
限制
時間限制:1000 ms
記憶體限制:65536 kb
我看網上其他人關於這個題的貪心解法,這裡貼一為博主的貪心解法(下面借用了一些圖),基本都是將規律總結出一些公式來ac,但我一開始沒想那麼多,看著這個題的規模不是很大,noip判分模式能得分總比沒有分好,所以直接暴力列舉。
思路:一種費時的笨方法,運用了貪心加列舉,從6*6開始倒序裝(貪心),然後列舉每種情況。
1.當放6*6時,箱子剛好滿:
2.當放5*5時,剩下11個1*1:
.3當放4*4時,剩下20個格仔,可以放5個2*2,或者20個1*1,再或者2*2與1*1的組合。
4.當放3*3時,每當3*3的數量超過4個時,直接放滿一箱,當3*3的數量小於4個時,可組成3*3與2*2與1*1的組合,或者3*3與1*1的組合
5.當放2*2時,先把2*2放滿,然後放1*1;
6.當放1*1時,直接放,滿了加乙個箱。
#include #include #include using namespace std;
int main()
} if (flag == true)
ans=0;
while(1) else if (a[5]>0) else
flag = false;
ans++;
area = 36;
} else if (a[4]>0) else
}flag = false;
ans++;
area=36;
} else if (a[3]>0) else
while (a[1]>0 && area>0)
}flag = false;
ans++;
area=36;
} else if (a[2]>0)
while (a[1]>0 && area>0)
flag = false;
ans++;
area=36;
} else if (a[1]>0)
flag = false;
ans++;
area=36;
}if (flag == true)
break;
} printf ("%d\n", ans);
} return 0;
}
openjudge 貪心 裝箱問題
乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1,2 2,3 3,4 4,5 5,6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有乙個好的程式...
貪心演算法 裝箱問題
貪心演算法中必須設定乙個貪心準則 來尋求每一步的最優解,但最後往往不是問題的整體最優解。問題 假設有n個物品,其體積為v1,v2,v3,v4.v n,有若干個體積為v的箱子 理論物品的體積應該小於箱子的體積 要求把所有物品全部裝入箱子中,要求開啟的箱子數最少。分析 怎樣合理化分配才能使得開啟的箱子數...
貪心演算法(裝箱問題)
貪心演算法的基本思想是找出整體當中每個小的區域性的最優解,並且將所有的這些區域性最優解合起來形成整體上的乙個最優解。因此能夠使用貪心演算法的問題必須滿足下面的兩個性質 1.整體的最優解可以通過區域性的最優解來求出 2.乙個整體能夠被分為多個區域性,並且這些區域性都能夠求出最優解。3.區域性最優解不一...