动态规划--dominoes
2013-02-27 12:34 Dr.Ray 阅读(250) 评论(0) 收藏 举报每个骨牌1*2,给出一个3*n的矩形,求用骨牌填满矩形的方法的数量。
首先,边际情况分析,3*1无解,3*2有3解,3*3无解,3*4除了分成2个3*2的情况以外还有2个解,。。。。。。。。
易得n必为偶数。
分析完以后,还是不能找到递推。。
但是一个一个去掉dominoe会发现,填充一端可看做3种可能,1、齐边,2、缺一个角 3、缺一个竖向骨牌(与2加一个横向骨牌不同的情况),图示:0表示横向骨牌,1表示竖向。
1: 00 2:前面齐边,紧跟一个: 3:前面齐边后跟:00 00
00 1 1 00
00 1 1 00
于是用opt1[]储存1的情况数,opt2[]储存2,opt3[]储存3;
易得递推:
opt1[n] = opt2[n-1] *2 + opt3[n] *2 + opt1[n-2]
opt2[n] = opt1[n-1] + opt3[n-1]
opt3[n] = opt1[n-4] + opt2[n-1]
最后输出齐边opt1相应的值就可以了
阶段:n长度
状态:三个opt,1为主,2、3为辅助,转移方程见上