zoukankan      html  css  js  c++  java
  • poj_1185状压dp

    用二维数组写了好久,失败啊。。
    #include<iostream>
    #include<string.h>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m;
    int dp[110][110][110];
    char st[110][12];
    int s[110],an[110],as[110];
    int convert(int n)
    {
        int cnt=0;
        while(n>0)
        {
            if(n%2)cnt++;
            n/=2;
        }
        return cnt;
    }
    int main()
    {
        int cnt=0;
        memset(s,0,sizeof(s));
        for(int i=0;i<=(1<<10);i++)
        {
            if(!(i&(i<<1)))
                if(!(i&(i<<2)))
                {as[cnt]=i;s[cnt]=convert(i);cnt++;}
    
        }
        while(cin>>n>>m)
        {
            int nallstatus=2<<(m-1);
            memset(dp,-1,sizeof(dp));
            memset(st,'',sizeof(st));
            memset(an,0,sizeof(an));
            for(int i=0; i<n; i++)
                scanf("%s",st[i]);
                for(int i=0;i<n;i++)
                    for(int j=0;j<m;j++)
                    if(st[i][j]=='H')
                    an[i]|=(1<<j);
            for(int j=0; as[j]<nallstatus; j++)
            {
                if(!(as[j]&an[0]))
                    {dp[0][0][j]=s[j];
                    }
            }
           for(int i=1;i<n;i++)
            for(int j=0;as[j]<nallstatus;j++)
            for(int k=0;as[k]<nallstatus;k++)
            for(int l=0;as[l]<nallstatus;l++)
           {
               int state=1;
               if(as[j]&an[i]) state=0;
                if(as[j]&as[k]) state=0;
                if(as[j]&as[l]) state=0;
                if(as[k]&as[l]) state=0;
                if(as[k]&an[i-1]) state=0;
                if(as[l]&an[i-2]) state=0;
                if(state)
                {
                    dp[i][k][j]=max(dp[i][k][j],dp[i-1][l][k]+s[j]);
                    /*if(i==3&&as[j]==4)
                    {
                        cout<<s[k]<<s[j]<<dp[i-2][as[l]]<<dp[i][as[j]]<<endl;
                        cout<<as[k]<<as[l]<<endl;
                    }*/
                }
           }
           /*for(int i=0;i<n;i++)
           {
               for(int j=0;as[j]<nallstatus;j++)
                cout<<dp[i][as[j]];
               cout<<endl;
           }*/
           /*for(int i=0;as[i]<nallstatus;i++)
            cout<<dp[0][as[i]]<<as[i]<<endl;*/
           int cur=0;
           for(int i=0;as[i]<nallstatus;i++)
            for (int j=0;as[j]<nallstatus;j++)
            cur=max(cur,dp[n-1][i][j]);
           cout<<cur<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    Linux下安装Tomcat服务器和部署Web应用
    全链路压测
    性能测试二八原则,响应时间2/5/8原则
    chromedriver、firefox-geckodriver、iedriver下载链接
    selenium3+python3环境搭建
    SQL注入原理
    loadrunner之header相关,token等
    安全测试——利用Burpsuite密码爆破(Intruder入侵)
    性能测试之系统架构分析
    性能测试性能分析与调优的原理
  • 原文地址:https://www.cnblogs.com/vactor/p/4100007.html
Copyright © 2011-2022 走看看