zoukankan      html  css  js  c++  java
  • 二维状态压缩——cf903F

    题解看这个https://blog.csdn.net/u013534123/article/details/78926568

    状压的debug真的很烦

    #include<bits/stdc++.h>
    using namespace std;
    
    int mask[5][5],n,a[5],dp[1010][1<<16],b[5][2005];
    char mp[5][2005];
    /*
    15 11 7 3
    14 10 6 2
    13 9  5 1
    12 8  4 0
    */
    void premask(){
        mask[0][0]=0b1111111111111111;
        mask[0][1]=0b0111111111111111;
        
        mask[1][0]=0b1111111111111111;
        mask[1][1]=0b1011111111111111;
        mask[1][2]=0b0011001111111111;
        
        mask[2][0]=0b1111111111111111;
        mask[2][1]=0b1101111111111111;
        mask[2][2]=0b1001100111111111;
        mask[2][3]=0b0001000100011111;
        
        mask[3][0]=0b1111111111111111;
        mask[3][1]=0b1110111111111111;
        mask[3][2]=0b1100110011111111;
        mask[3][3]=0b1000100010001111;
        mask[3][4]=0b0000000000000000;
    }
    
    int main(){
        cin>>n;
        for(int i=1;i<=4;i++)cin>>a[i];
        for(int i=0;i<4;i++)scanf("%s",mp[i]);
        for(int i=0;i<4;i++)
            for(int j=0;j<n;j++)
                b[i][j]=mp[i][j]=='*'?1:0;
        
        memset(dp,0x3f,sizeof dp);
    
        
        int init=0;
        for(int j=0;j<4;j++)
            for(int i=0;i<4;i++)
                init<<=1,init|=b[i][j];
        dp[0][init]=0;
        
        premask();
        
        for(int i=0;i<n;i++){
            for(int s=0;s<(1<<16);s++){
                if(dp[i][s]==0x3f3f3f3f)continue;
                for(int l1=0;l1<=1;l1++)
                    for(int l2=0;l2<=2;l2++)
                        for(int l3=0;l3<=3;l3++)
                            for(int l4=0;l4<=4;l4++){
                                int now=s;
                                //cout<<i<<" "<<now<<'
    ';
                                now&=mask[0][l1];
                                //cout<<i<<" "<<now<<'
    ';
                                now&=mask[1][l2];
                                //cout<<i<<" "<<now<<'
    ';
                                now&=mask[2][l3];
                                //cout<<i<<" "<<now<<'
    ';
                                now&=mask[3][l4];
                                //cout<<i<<" "<<now<<'
    ';
                                //cout<<"
    ";
                                if((now>>15)&1)continue;
                                if((now>>14)&1)continue;
                                if((now>>13)&1)continue;
                                if((now>>12)&1)continue;
                                
                                int cost=a[l1]+a[l2]+a[l3]+a[l4];
                                int nxt=now;
                                for(int j=0;j<4;j++){
                                    nxt<<=1;
                                    nxt&=(1<<16)-1;
                                    nxt|=b[j][i+4];
                                }
                                dp[i+1][nxt]=min(dp[i+1][nxt],dp[i][s]+cost);
                                /*cout<<l1<<" "<<l2<<" "<<l3<<" "<<l4<<'
    ';
                                cout<<i<<" "<<s<<" "<<nxt<<"
    ";
                                cout<<dp[i][s]<<" "<<dp[i+1][nxt]<<"
    ";
                                */
                            }
            }
        }
        /*
        for(int i=0;i<n;i++){
            for(int s=0;s<(1<<16);s++)
                if(dp[i][s]!=0x3f3f3f3f)cout<<dp[i][s]<<" ";
            puts("");
        }*/
        cout<<dp[n][0]<<" ";
    }
  • 相关阅读:
    解决eclipse maven 项目重新下载包这个问题
    Python猴子补丁
    浅谈服务治理与微服务
    微服务
    Tornado部署与运行
    tornado部署
    【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
    以gevent(协程) 方式跑uwsgi服务
    uwsgi配置理解
    python Web开发你要理解的WSGI & uwsgi详解
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12292831.html
Copyright © 2011-2022 走看看