张裕 发表于 2025-3-9 13:27:35

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

 https://i-blog.csdnimg.cn/direct/22576672f0a34b709f1522000221eea6.png

#include<bits/stdc++.h>

const int N=1000000;

using namespace std;

bool mp;

int cnt=0;
int n;

void dfs(int row,int col){
cnt=cnt%1000000007;
        if(col==n && row==2){
                cnt++;
                return ;
        }
        if(row>=2){ //下一列
                dfs(0,col+1);
                return;
        }
       
        if(mp==1){ //下一行
                dfs(row+1,col);
                return ;
        }
       
        //I型木块两种情况,平放和竖放
        //1.竖放
        if(row==0 && mp==0 && mp==0){
                mp=1,mp=1;
                dfs(row+2,col); //直接下一列
                mp=0,mp=0;
       
        }
        //2.横放
        if(col+1<=n &&mp==0 && mp==0){
                mp=1 , mp=1;
                dfs(row+1,col);
                mp=0 , mp=0;
        }
        //L型木块有四种可能
        //第一种
        if(row==0 && col+1<=n && mp==0 && mp==0 && mp==0){
                mp=1 , mp=1 , mp=1;
                dfs(row,col+1);
                mp=0 , mp=0 , mp=0;
        }
        //第二种
        if(row==1 && col+1<=n && mp==0 && mp==0 && mp==0) {
                mp=1 , mp=1 , mp=1;
                dfs(row+1,col); //直接下一列
                mp=0 , mp=0 , mp=0;
        }
        //第三种
        if(row==0 && col+1<=n && mp==0 && mp==0 && mp==0){
                mp=1 , mp=1 , mp=1;
                dfs(row+1,col+1);
                mp=0 , mp=0 , mp=0;
        }
        //第四种
        if(row==0 && col+1<=n && mp==0 && mp==0 && mp==0){
                mp=1 , mp=1 , mp=1;
                dfs(row+1,col);
                mp=0 , mp=0 , mp=0;
        }
}

int main(){
        cin>>n;
        //搜索方式从上到下从左到右
        dfs(0,1);
        cout<<cnt%1000000007<<endl;
        return 0;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 力大砖飞,纯暴力搜索——蓝桥p2110(写着玩的)