| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5714 人关注过本帖, 1 人收藏
标题:瓷砖覆盖地面问题
只看楼主 加入收藏
zxc1989
Rank: 2
等 级:论坛游民
帖 子:15
专家分:45
注 册:2011-11-15
收藏
得分:2 
唉,能力有限啊,等高手来吧。
2011-11-16 15:37
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:2 
太复杂了,昨天就想了一段时间,自己推出来的完全不对,继续等高手吧
2011-11-16 17:02
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
LZ还没弄懂吗?  100分啊。什么不懂的问吧,我尽量讲明白
2011-11-16 17:30
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
我不懂dfs函数要做什么

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-11-16 21:07
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:10 
回复 34楼 waterstar
这么说吧,举个简单的例子,比如我们在用动态规划求最长上升子序列的时候,我们的动态转移方程是f[i]=Max(f[j])+1; (a[i]>a[j],i>j),实现的时候就是在求f[i]的时候枚举1-i-1,实现状态的转移。同样,我们也可以这样做:每次我们求出f[i],就用f[i]更新i+1-n的状态,这样也可以得到答案。
for (i=1; i<=n; i++) f[i]=1;
for (i=1; i<=n; i++)

 for (j=i+1; j<=n; j++)
  if (f[i]+1>f[j] && a[i]<a[j]) f[j]=f[i]+1;    

上面的实现从本质上来说和正常的实现是没有什么区别的。

dfs函数也是这个道理,对于f[i,S]状态,搜索所有可以达到的f[i+1,S']状态,然后将结果累加进去,具体实现当然比上题要复杂。不知我这么说能不能清楚一点
2011-11-16 21:18
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
还是不懂,这题的状态转移比例子复杂多了,还是说说代码的意思吧。比如说
dep,now,next这三个变量表示的是什么?

now & (1 << dep)在判断什么?

为什么在dep位铺竖直铺一块会变成dfs (dep + 1, now | (1 << dep), next | (1 << dep))这样的调用?

最后的if是在判断什么?

初始判断f[i][j]是为了什么?

为什么会调用这种形式dfs (0, j, 0)?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-11-16 21:42
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:10 
dep表示看从0-m-1位能否铺砖,dep就表示第dep位,所以搜到第m位表示现在这一层已经铺满了
now表示现在这一层的状态,next表示下一层的状态

now & (1 << dep) 字面意思是now的第dep位是不是1(dep为0到m-1),如果是1,就表示不能放砖了,当然就转到dep+1层

在dep位竖直铺砖,则now和next的dep位都要铺砖,所以他们的dep位都要变成1

最后的if判断的是如果now的第dep位为0,想要横着铺,那么第dep+1也要为0才能横着放

首先f[i,j]这个状态必需有效,如果是无法达到的状态(即=0),搜索是没有意义的。dfs(0,j,0)的意思是搜索第0位,当前状态为j,下一层的状态暂时为0(还没开始铺)

[ 本帖最后由 czz5242199 于 2011-11-16 21:57 编辑 ]
2011-11-16 21:48
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
好贴怎么能这么快沉呢。顶起。
czz5242199的算法是目前所能找到的最快的算法,不过其本质仍属于枚举。关于这一算法,最早我在happywan1986的博客里见过,czz5242199不会和他是一个人吧?
我很想找到一个递推关系(你们找到的那个公式已超出了我的能力范围),很遗憾,到现在也没成功。
呵呵,但我仍相信这一关系一定存在,有兴趣的朋友闲暇时不妨多想一想。它的价值足以作为一篇硕士毕业论文了。

重剑无锋,大巧不工
2011-11-17 18:19
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
回复 38楼 beyondyf
既然已经得到了杨大哥的认可  我也要去学习一下czz的代码

                                         
===========深入<----------------->浅出============
2011-11-17 18:43
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 38楼 beyondyf
明显不是,1986,我猜这是他的出生年把,比我大了6岁。
2011-11-17 19:30
快速回复:瓷砖覆盖地面问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024370 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved