网站大量收购闲置独家精品文档,联系QQ:2885784924

多米诺骨牌解题报告.pdfVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多米诺骨牌 [问题描述] 【算法分析】 很容易想到通过状态压缩 每行每列的 情况来动态规划,但这样状 态是 2n+m 的,只能通过部分数据。 这样做为什么会慢呢?有一点是很醒目的,当某一列在之前已经 ,这 时你再添加一个横的,这一列仍然保持 ,二进制状态一点也没变。虽然我也 讲不清为什么这样会慢,但是直觉……所以想通过计算补集,即有多少种方案列 不连通。这里是可以用容斥原理做的,用 S 表示至少有 i 列不 的方案,那么 i i m-1 我们要计算的就是 S -S +S ……+(-1) S +……+(-1) S 。那么怎么求有 S 呢? 0 1 2 i m-1 i 下面以 S 为例,其它情况类推。 2 对于至少要两列不连通的情况,我们枚举这两列,将矩形分成 A 、A 、A 1 2 3 这三个区域。现在我们要计算有多少种方案满足每一行都 。对于某一行只要 这三个中任意一个那一行是 的即可,所以这三个矩形我们要 考虑。用 F[i]表示从第 1 行到第 i 行都 的方案数。我们先计算第一行到第 i 行随意摆放 骨牌的方案数,然后减去某一行不连通的方案数。我们枚举第一个不连通的行j , 那么需要减去的方案数为 F[j]乘以 j+1 行到 i 行随意摆放骨牌的方案数,所以 。其中 Sum[A,i,j]表示子矩形A 的第 i 行到第j 行的孙子矩形里算意摆放骨牌的方案数, F[0]=-1。 接下来我们只要预处理Sum数组就能在2m ×nm 的时间复杂度内解决此问 题。由于我们要计算所有子矩形中随意摆放骨牌的方案数,所以还是会超时。但 事实上当我们确定左边界、有边界、上边界后,所有矩形的 Sum 值可以在一次 2 m 状态压缩动态规划中一起计算。至此此题已经解决,时间复杂度O(nm ×nm2 )。 【总结】 这是一道很难的统计题,很难跳出状态压缩的定式从容斥的角度来统计,并 且那个在计算行 方案数时的递推也相当巧妙。 【程序】 program ex1; const p type tk=array[0..20,0..20] of longint; var map,mmap:tk; f:array[0..20,0..20,0..1 shl 15] of longint; sum:array[0..20,0..20,0..20,0..20] of longint; s,e:array[0..20] of longint; tot,x1,y1,x2,y2,i,j,k,l,m,n,xys,lhh:longint; ch:char; procedure calc(var a:tk;n,m:longint); //状态压缩计算矩形 a 中随便摆放骨牌的方案数 var ii,jj,kk,ll,mm,nn:longint; begin for ii:=0 to n+1 do for jj:=0 to m do

文档评论(0)

daluobu + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档