题目大意:给出4个矩形(1<=任意边长<=50),寻找最小的矩形可以竖直容纳给出的4个矩形.
思路:
有以上6种情况的堆放方式.再通过排列与旋转枚举所有情况.另外,第4第5种计算的结果相同,所以合并为一种情况.所以总共枚举有4! * 2^4 *5 = 1920.(其中有不少重复的情况,如第1种只需枚举1种排列即可).
schema 1 :
[ 0123 ]
wid=wid0+wid1+wid2+wid3 , ht=max(ht0,ht1,ht2,ht3);
schema 2:
[ 012 ]
[ 333 ]
wid=max(wid0+wid1+wid2,wid3) , ht=max(ht0,ht1,ht2)+ht3;
schema 3:
[ 013 ]
[ 223 ]
wid=max(wid0+wid1,wid2)+wid3 , ht=max(wid3,max(wid0,wid1)+wid2);
schema 4/5:
[ 023 ]
[ 123 ]
wid=max(wid0,wid1)+wid2+wid3 , ht=max(ht0+ht1,ht2,ht3);
schema 6:
[ 23 ]
[ 01 ]
wid=max(
wid0+wid1,
wid0+wid3(当 ht0>ht1,否则03无法接触),
wid1+wid2(当 ht1>ht0,否则12无法接触) ,
wid2+wid3(当 ht1+ht3>ht0,否则23无法接触),
wid2,
wid3)
ht=max(ht0+ht2,ht1+ht3).
代码:
//看着usaco的代码写的~~