博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Packing Rectangles chapter1.4
阅读量:4920 次
发布时间:2019-06-11

本文共 2627 字,大约阅读时间需要 8 分钟。

开始完全没有思路,不知如何贪心下手,后来看到这篇博主的结题报告,研究了会才搞懂

然后自己仿照着写,到situation5(就是第6幅图,4,5图一种情况)时还是出错了,后来想想我少考虑了一种情况

自己的是max2(a.width+b.width,c.width+d.width),应该是max3(a.width+b.width,c.width+d.width,b.width+d.width)

1 /*  2   3 ID: hubiao cave  4   5 PROG: packrec  6   7 LANG: C++  8   9 */ 10  11  12  13  14 #include
15 #include
16 #include
17 #include
18 #include
19 using namespace std; 20 21 //#define max2(a,b) (a>b?a:b) 22 //#define max3(a,b,c) (a>max2(b,c)?a:max2(b,c)) 23 //#define max4(a,b,c,d) (a>max3(b,c,d)?a:max3(b,c,d)) 24 25 int max2(int a,int b) 26 { 27 return a>b?a:b; 28 } 29 int max3(int a,int b, int c) 30 { 31 return max2(max2(a,b),c); 32 } 33 int max4(int a,int b,int c,int d) 34 { 35 return max2(max2(a,b),max2(c,d)); 36 } 37 38 39 40 struct rect 41 { 42 int width; 43 int height; 44 }; 45 rect rc[4]; 46 int index[4]={
0,1,2,3}; 47 48 void swap(rect&); 49 50 void work(rect,rect,rect,rect); 51 52 void situ1(rect,rect,rect,rect); 53 void situ2(rect,rect,rect,rect); 54 void situ3(rect,rect,rect,rect); 55 void situ4(rect,rect,rect,rect); 56 void situ5(rect,rect,rect,rect); 57 58 bool operator<(const rect& rc1,const rect&rc2) 59 { 60 return rc1.width
sr; 67 68 int main() 69 70 { 71 72 ifstream fin("packrec.in"); 73 ofstream fout("packrec.out"); 74 for(int i=0;i<4;i++) 75 { 76 fin>>rc[i].height>>rc[i].width; 77 } 78 79 for(int i=0;i<2;i++) 80 { 81 swap(rc[0]); 82 for(int j=0;j<2;j++) 83 { 84 swap(rc[1]); 85 for(int m=0;m<2;m++) 86 { 87 swap(rc[2]); 88 for(int n=0;n<2;n++) 89 { 90 swap(rc[3]); 91 92 do 93 { 94 work(rc[index[0]],rc[index[1]],rc[index[2]],rc[index[3]]); 95 96 } while (std::next_permutation(index,index+4)); 97 } 98 } 99 }100 }101 102 fout<
<
::iterator it=sr.begin();it!=sr.end();it++)104 {105 fout<<(*it).width<<" "<<(*it).height<
=a.height+d.height)152 {153 maxw=max2(max2(a.width,d.width)+c.width,b.width);154 }155 else156 {157 if(c.height>=d.height)158 {159 maxw=max3(a.width+b.width,c.width+d.width,a.width+c.width);160 }161 if(c.height
d.height)162 {163 maxw=max3(a.width+b.width,c.width+d.width,b.width+d.width);164 }165 if(b.height+c.height<=d.height)166 {167 maxw=max2(a.width,max2(b.width,c.width)+d.width);168 }169 170 171 }172 update(maxh,maxw);173 }174 175 176 void update(int wid,int height)177 {178 rect rc1;179 int area=wid*height;180 181 if(wid>height)182 {183 int temp=height;184 height=wid;185 wid=temp;186 }187 rc1.height=height;188 rc1.width=wid;189 190 if(area

 

转载于:https://www.cnblogs.com/cavehubiao/p/3250016.html

你可能感兴趣的文章
MVC路由配置例
查看>>
某大型银行深化系统之十七:性能设计之二
查看>>
linux mysql-server can't find mysql_config
查看>>
php script 的生命周期
查看>>
Python的类(class)
查看>>
MFC启动和关闭线程
查看>>
JQuery EasyUI datagrid pageNumber 分页 请求/加载 两次
查看>>
.NET里面 abstract class和Interface有什么区别以及用法的展现?
查看>>
redis的数据持久化再讲 关于redisAOF RDB工作原理
查看>>
Docker官方tomcat镜像的使用
查看>>
3、DOM操作
查看>>
html自定义checkbox、radio、select —— checkbox、radio篇
查看>>
iDevice取证的一大突破
查看>>
java初学者笔记总结day4
查看>>
java泛型
查看>>
【优先队列】-HDU4546比赛难度
查看>>
操作系统简介
查看>>
正向代理--反向代理
查看>>
JavaScript实现多栏目切换效果
查看>>
Lazarus1.0.2 和 DelphiXE3 的一些异同
查看>>