码迷,mamicode.com
首页 > 其他好文 > 详细

【6n】2*3n骨牌问题

时间:2018-06-08 15:43:50      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:output   std   意义   AC   单位   两种   inpu   特殊   open   

【Problem description】

  已知3×2n个棋盘格子,试求用火柴棒覆盖所有格子的方法(一根火柴棒可覆盖2个格子)。如n=1时,有如下3种覆盖方法:

 

 

  编写一个程序,试对给出的任意一个n(0<n<1000),输出铺法的总数。【Algorithm design】

Developing program 动态规划

【Problem analysis】

和初级骨牌相差不了多少

某种意义上只是衍生的方式变了

 

通过观察题目的图

以两列格子为一个单位

每个单位都可以由上一个单位所有情况经过三种变换得来

但是特殊的是

可以出现像这样的情形:

 

也就是说 每个单位还可以由前面任意一个单位通过两种变换延伸出来(横路在最上或最下)

其实一开始讨论的

和也从属于这种情况

所以三种变换可以缩为一种

 

那么动规方程:

 

 

为了方便 设置一个前缀和sum

因为第一单位有三种情况 第零单位也要计入一个

所以sum初始为4

【Source code】

#include <bits/stdc++.h>

#define bnd 1001

#define ll long long

 

using namespace std;

 

Bign类型

 

bign dp[bnd],sum;

int col;

 

void input()

{

   cin>>col;

   dp[1]=3;

   sum=4;

   return;

}

 

void work()

{

   for(int i=2;i<=col;i++)

   {

      dp[i]=dp[i-1]+sum+sum;

      sum+=dp[i];

   }

   return;

}

 

void output()

{

   cout<<dp[col]<<endl;

   return;

}

 

int main()

{

   freopen("gupai.in","r",stdin);

   freopen("gupai.out","w",stdout);

   input();

   work();

   output();

   fclose(stdin);

   fclose(stdout);

   return 0;

}

 

【6n】2*3n骨牌问题

标签:output   std   意义   AC   单位   两种   inpu   特殊   open   

原文地址:https://www.cnblogs.com/qswx/p/9155689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!