/*与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\n",max);

   getchar();

  }

  return 0;

}

hdu 2167 状态压缩的更多相关文章

  1. hdu 2167(状态压缩基础题)

    题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...

  2. hdu 2167 状态压缩dp

    /* 状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]); */ #include<stdio.h> #include<string ...

  3. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

  4. hdu 4739(状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4739 思路:状态压缩. #include<iostream> #include<cs ...

  5. HDU 3341 状态压缩DP+AC自动机

    题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...

  6. hdu 1565(状态压缩基础题)

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

  7. HDU 2553 状态压缩

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. hdu 3006(状态压缩)

    The Number of set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. hdu 2489(状态压缩+最小生成树)

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. UGUI_屏幕适配

    引用:http://www.xuanyusong.com/archives/3278#comments 1.可以选择的有三种: 1.Screen Space – overlay  此模式不需要UI摄像 ...

  2. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  3. AJPFX:实现递归统计文件夹的总大小

    class Statistical {    public static void main(String[] args) {        Scanner sc = new Scanner(Syst ...

  4. CAS分析

    CAS:Compare and Swap, 翻译成比较并交换.   CAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令.这个指令会对内存中的共享数据做原子的读写操作.简 ...

  5. 秦晓波著的编写高质量代码-改善Java程序的151个建议一书中的线程解释错误.

    位置: 建议127: Lock与synchronized是不一样的 首先在概念上纠正这一篇内容: 援引Java源码中关于ReentrantLock的开篇说明: * A reentrant mutual ...

  6. 获取页面URL两种方式

    以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...

  7. Photoshop 注册破解

    本机测试环境为Photoshop cs4 破解方式一: 打开C:\windows\system32\drivers\etc\"找到 hosts 文件, 右键点击--打开方式---记事本,然后 ...

  8. codevs 1219 骑士游历 1997年

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 设有一个n*m的棋盘(2≤n≤50,2≤m≤50),如下图,在棋盘上有一个中国象 ...

  9. 职业生涯手记——记人生中第一次经历的产品上线——内测篇Day11

    2017/08/21 产品内测期Day11 说出来可能你不信,原定于9月15号结束的内测活动,今天居然被甲方投诉导致强制停止,原因是这个内测活动没有经过批准,并且有用户打了甲方所在公司的客服部门,增加 ...

  10. Gym - 100676G Training Camp (状压dp)

    G. Training Camp[ Color: Yellow ]Montaser is planning to train very hard for ACM JCPC 2015; he has p ...