zoukankan      html  css  js  c++  java
  • hdu 2167 状态压缩

    /*与1565的解法差不多*/

    #include<stdio.h>
    #include<string.h>
    int map[16][16];
    int dp[2][1<<16];
    int h[1<<16];
    int Max(int a,int b)
    {
     return a>b?a:b;
    }
    int main()
    {
     int m,i,j,k,max;
     m=0;
     for(i=0;i<(1<<16);i++)
      if((i&(i<<1))==0)
       h[m++]=i;
      char s[1001];
      while(gets(s))
      {
       
       int len=strlen(s);
       if(len==0)
        break;
       int num=0;
       for(i=0;i<len;i+=3)
       {
        map[0][num++]=10*(s[i]-'0')+(s[i+1]-'0');
       }
       for(i=1;i<num;i++)
       {
        gets(s);
        int k=0;
        for(j=0;j<len;j+=3)
         map[i][k++]=10*(s[j]-'0')+(s[j+1]-'0');
       }
       memset(dp,0,sizeof(dp));
       int p=0;
       for(i=0;i<num;i++)
       {
        p^=1;
        for(j=0;j<m;j++)
        {
         if(h[j]>(1<<num))
          break;
         max=0;
         for(k=0;k<num;k++)
          if(h[j]&(1<<k))
           max+=map[i][k];
          for(k=0;k<m;k++)
          {
           if(h[k]>(1<<num))
            break;
           if(h[j]&h[k])
            continue;
           if(h[j]&(h[k]<<1))
            continue;
           if(h[j]&(h[k]>>1))
            continue;
           dp[p][h[j]]=Max(dp[p][h[j]],dp[1-p][h[k]]+max);
          }
        }
       }
       int max=0;
       for(i=0;i<m&&i<=(1<<num);i++)
        if(max<dp[p][h[i]])
         max=dp[p][h[i]];
        printf("%d ",max);
       getchar();
      }
      return 0;
    }

  • 相关阅读:
    JAVA类和对象
    JAVA数组
    JAVA流程控制语句
    JAVA运算符
    JAVA数据类型-整数、浮点、字符串、boolean、引用数据类型
    JAVA变量
    JAVA文档注释的三种方式
    @Transactional注解失效的场景总结
    接口幂等性
    事务的四个特性、四种隔离级别和七种传播行为
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410990.html
Copyright © 2011-2022 走看看