求算法:切割矩形问题

cmckliao3 2008-04-13 01:30:31
切割矩形
[题目描述]
把一个a*b 矩形切割成尽量少的正方形。每次可以选择一个矩形,沿着水平
或者垂直线把它切成两部分(不能转弯)。
[输入] incise.in
两个整数a, b(1<=a,b<=100)
[输出] incise.out
最少的正方形个数
[样例输入]
5 6
[样例输出]
5
...全文
958 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxqwin74 2011-11-05
  • 打赏
  • 举报
回复
http://blog.csdn.net/zxqwin74/article/details/6933562
深度抽象 2011-10-29
  • 打赏
  • 举报
回复
数学可以解决,我曾经见到过这样的问题,应该叫 最小覆盖
AndyZhang 2011-10-27
  • 打赏
  • 举报
回复
这个需要学习啊
dragon37ng 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c1053710211 的回复:]
动态规划应该可以解决
对于一个边长为m,n的长方形,d[m,n]是目标函数
那么d[m,n]=min(d[m-p,n]+d[p,n],d[m,n-l]+d[m,l]) 0<p<m,0<l<n
不过时间复杂度好像....
提供个思路,占个沙发,等其他人解决
[/Quote]
这个状态方程就相当与把每种情况都讨论了一下,跟搜索有什么区别?
会超时么?貌似要顺序,能逆推么。。。我是沙茶,求神牛详细讲解下 。。。
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
  • 打赏
  • 举报
回复
精确一些.状态值共有O(m*n)个,每次状态转移的时候计算量<(m+n)
因此整体的复杂度是O(m*n*(m+n)),不超过两百万次。
  • 打赏
  • 举报
回复
说的是,贪心策略并不合适,应该是动态规划!
状态转移方程是 d[m,n]=min(d[m-p,n]+d[p,n],d[m,n-l]+d[m,l]) 0<p<m,0<l<n 没错
C1053710211 2008-04-15
  • 打赏
  • 举报
回复
to dlyme
如果是贪心的话,对于给出的例子6,5,这样分割
(6,5)->(5,5)+(5,1)->(5,5)+5*(1,1)是六个正方形
但是可以
(6,5)->(6,3)+(6,2)->2*(3,3)+3*(2,2)是5个正方形
所以贪心不是最优解,
这个题虽然用动态规划是O(n^2*m^2),的时间复杂度,
但是m,n都是小于100的数,应该可以容忍时间上的缺陷。
p0303230 2008-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dlyme 的回复:]
贪心算法:
如果a==b,那已经是满足要求的矩形,不用再切;
否则的话(假设a>b),则切成b*b和(a-b)*b两块;
如果(a-b)*b不是矩形,按照同样的办法切下去...
[/Quote]
  • 打赏
  • 举报
回复
贪心算法:
如果a==b,那已经是满足要求的矩形,不用再切;
否则的话(假设a>b),则切成b*b和(a-b)*b两块;
如果(a-b)*b不是矩形,按照同样的办法切下去...
C1053710211 2008-04-13
  • 打赏
  • 举报
回复
动态规划应该可以解决
对于一个边长为m,n的长方形,d[m,n]是目标函数
那么d[m,n]=min(d[m-p,n]+d[p,n],d[m,n-l]+d[m,l]) 0<p<m,0<l<n
不过时间复杂度好像....
提供个思路,占个沙发,等其他人解决

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧