/*与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. jQuery将json字符串显示在页面上

    js代码: function syntaxHighlight(json) { if (typeof json != 'string') { json = JSON.stringify(json, un ...

  2. 动手实现 React-redux(六):React-redux 总结

    到这里大家已经掌握了 React-redux 的基本用法和概念,并且自己动手实现了一个 React-redux,我们回顾一下这几节都干了什么事情. React.js 除了状态提升以外并没有更好的办法帮 ...

  3. asp.net MVC中实现调取web api

    public ActionResult Index(string city) { if (string.IsNullOrEmpty(city)) { city = "上海"; } ...

  4. [转]Java中实现自定义的注解处理器

    Java中实现自定义的注解处理器(Annotation Processor) 置顶2016年07月25日 19:42:49 阅读数:9877 在之前的<简单实现ButterKnife的注解功能& ...

  5. DOM编程练习(慕课网题目)

    编程练习 制作一个表格,显示班级的学生信息. 要求: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff 2. 点击添加按钮,能动态在最后添加一行 3. 点 ...

  6. sql语句分为三类(DML,DDL,DCL)-介绍

    本文知识来源自:<Oracle专家高级编程> 分享作者:Vashon 时间:20150415 DDL is Data Definition Language statements. Som ...

  7. AJAX中文乱码解决方案

    通过AJAX获取数据中文乱码解决方案: @ResponseBody 作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到 ...

  8. 用JS检测页面加载的不同阶段状态

    这可以通过用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == “complete”判断是否加载完成. 可以采用2个div ...

  9. qt QTableView/QTableWidget样式设置

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7591409.html 选中设置: QTableView::item:selected { background ...

  10. qt 设置阴影 不显示黑色边框

    this->setAttribute(Qt::WA_TranslucentBackground);