能力值:
( LV5,RANK:71 )
|
-
-
2 楼
顶一下~~123456
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
算法,好复杂。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个,相当蛋疼,最怕这个了。帮顶
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
感觉像是背包问题的变种。你查下!它那个是重量,你这个是面积!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这么说好了,楼主完全没把题目说清楚,“合理”是怎么个合理,有木有要求800*800全部放满,还是放满尽可能多的格子,小矩形的限制倒是说了一个,就是不能颠倒,但是数量呢,我是不是可以只用一种小矩形,还是说每种小矩形必须用几个,或1个。 不同的目的,解法不同,不同的限制,解法也不同。 你要把题目描述完整了才能解。
一般的话,可以尝试找规律,有时候一个规律就能搞定。
找不到规律,一般用背包(不过我觉得可能性不大)、状态压缩动态规划,再有就是找规律。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
建议你看看 贪婪算法 相关资料
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
2D装箱,
写一个函数,参数是大矩形区域和你要装的小矩形区域,
遍历你的小矩形区域,尝试把小矩形放入你的大矩形中,左上角对齐,不能放进去的跳过,如果能放进去,假设当前的小矩形为最好的,然后继续遍历,如果遇到还能放进去的,比较这两个能放进去的哪个好(具体比较可以用谁的面积大,谁的周长大,或者谁的某一边更接近当前大区域的对应边),保留比较得到的比较好的矩形(类似选择排序),遍历完的理论上会有一个小矩形或者没有得到任何能放进去的矩形。
如果没有找到能放进去的矩形,函数结束。
如果有,你想象下,大矩形的左上角和小矩形的左上角是重合的,那么小矩形的右下角就在大矩形内,然后从小矩形的右下角向大矩形的底边或者右边做垂线(这个可以做出两条垂线,垂线最好选择短的),就会把大矩形上小矩形不覆盖的区域分成两个矩形(这个过程你可以画个图看一下比较容易看清效果),然后假设这俩个被划分出来的矩形为大矩形,与剩下的小矩形继续调用本函数(递归)。
|
能力值:
( LV5,RANK:71 )
|
-
-
9 楼
谢谢大家的回答,感觉8楼兄弟讲的比较贴切.
|
|
|