力大砖飞,纯暴力搜索——蓝桥p2110(写着玩的)

打印 上一主题 下一主题

主题 694|帖子 694|积分 2082

 

  1. #include<bits/stdc++.h>
  2. const int N=1000000;
  3. using namespace std;
  4. bool mp[2][N];
  5. int cnt=0;
  6. int n;
  7. void dfs(int row,int col){
  8.   cnt=cnt%1000000007;
  9.         if(col==n && row==2){
  10.                 cnt++;
  11.                 return ;
  12.         }
  13.         if(row>=2){ //下一列
  14.                 dfs(0,col+1);
  15.                 return;
  16.         }
  17.        
  18.         if(mp[row][col]==1){ //下一行
  19.                 dfs(row+1,col);
  20.                 return ;
  21.         }
  22.        
  23.         //I型木块两种情况,平放和竖放
  24.         //1.竖放
  25.         if(row==0 && mp[row][col]==0 && mp[row+1][col]==0){
  26.                 mp[row][col]=1,mp[row+1][col]=1;
  27.                 dfs(row+2,col); //直接下一列
  28.                 mp[row][col]=0,mp[row+1][col]=0;
  29.        
  30.         }
  31.         //2.横放
  32.         if(col+1<=n &&mp[row][col]==0 && mp[row][col+1]==0){
  33.                 mp[row][col]=1 , mp[row][col+1]=1;
  34.                 dfs(row+1,col);  
  35.                 mp[row][col]=0 , mp[row][col+1]=0;
  36.         }
  37.         //L型木块有四种可能
  38.         //第一种
  39.         if(row==0 && col+1<=n && mp[row][col]==0 && mp[row+1][col]==0 && mp[row+1][col+1]==0){
  40.                 mp[row][col]=1 , mp[row+1][col]=1 , mp[row+1][col+1]=1;
  41.                 dfs(row,col+1);
  42.                 mp[row][col]=0 , mp[row+1][col]=0 , mp[row+1][col+1]=0;
  43.         }
  44.         //第二种
  45.         if(row==1 && col+1<=n && mp[row][col]==0 && mp[row][col+1]==0 && mp[row-1][col+1]==0) {
  46.                 mp[row][col]=1 , mp[row][col+1]=1 , mp[row-1][col+1]=1;
  47.                 dfs(row+1,col); //直接下一列
  48.                 mp[row][col]=0 , mp[row][col+1]=0 , mp[row-1][col+1]=0;
  49.         }
  50.         //第三种
  51.         if(row==0 && col+1<=n && mp[row][col]==0 && mp[row+1][col]==0 && mp[row][col+1]==0){
  52.                 mp[row][col]=1 , mp[row+1][col]=1 , mp[row][col+1]=1;
  53.                 dfs(row+1,col+1);
  54.                 mp[row][col]=0 , mp[row+1][col]=0 , mp[row][col+1]=0;
  55.         }
  56.         //第四种
  57.         if(row==0 && col+1<=n && mp[row][col]==0 && mp[row][col+1]==0 && mp[row+1][col+1]==0){
  58.                 mp[row][col]=1 , mp[row][col+1]=1 , mp[row+1][col+1]=1;
  59.                 dfs(row+1,col);
  60.                 mp[row][col]=0 , mp[row][col+1]=0 , mp[row+1][col+1]=0;
  61.         }
  62. }
  63. int main(){
  64.         cin>>n;
  65.         //搜索方式从上到下从左到右
  66.         dfs(0,1);
  67.         cout<<cnt%1000000007<<endl;
  68.         return 0;
  69. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表