zoukankan      html  css  js  c++  java
  • hdu 1565(状态压缩基础题)

    题意:容易理解。

    分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!!

    代码实现:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    
    int n;
    int dp[2][(1<<20)+10],map[25][25],a[20000],num;
    
    void chushihua()
    {
        int max=1<<20,i;
        for(i=0;i<max;i++)
         if((i&(i<<1))==0)
          a[num++]=i;
    }
    
    int qiu(int r,int flag)
    {
        int i,x=1<<(n-1),sum=0;
        for(i=1;i<=n;i++)
        {
            if((x&flag)!=0)
             sum=sum+map[r][i];
            x=x>>1;
        }
        return sum;
    }
    
    void solve()
    {
        int i,j,k,max,res=0,temp,p=0;
        max=1<<n;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
        {
            p=p^1;
            memset(dp[p],0,sizeof(dp[p]));
            for(j=0;j<num&&a[j]<max;j++)
            {
                for(k=0;k<num&&a[k]<max;k++)
                {
                    if((a[j]&a[k])!=0)
                     continue;
                    temp=qiu(i,a[j]);
                    if(dp[p][a[j]]<(temp+dp[1-p][a[k]]))
                     dp[p][a[j]]=temp+dp[1-p][a[k]];
                }
            }
        }
        for(i=0;i<num&&a[i]<max;i++)
         if(res<dp[p][a[i]])
          res=dp[p][a[i]];
        printf("%d
    ",res);
    }
    
    int main()
    {
        int i,j;
        num=0;
        chushihua();//把所有的可能状态抽出来
        while(scanf("%d",&n)!=EOF)
        {
            for(i=1;i<=n;i++)
              for(j=1;j<=n;j++)
                 scanf("%d",&map[i][j]);
            solve();
        }
        return 0;
    }
  • 相关阅读:
    Kotlin学习系列(三)
    获取Android设备标识符
    Kotlin学习系列(二)
    ijkplayer实现IMediaDataSource
    Fresco添加HTTP请求头
    Kotlin学习系列(一)
    完整的Android MVP开发之旅
    Marshmallow权限使用
    APP设计与开发(ui篇)
    下载Android源码
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3430208.html
Copyright © 2011-2022 走看看