/*
状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]);
*/
#include<stdio.h>
#include<string.h>
#define N 16
int ma[N][N];
int num[N];
char s[150];
int lower[15];//储存二级制
int dp[N][1<<N];//储存最优状态
int now[1<<N],cu;//储存合法的状态
int sum[N][1<<N];//储存第i行第j个状态的总的权值和
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,i,j,k,maxx;
lower[0]=1;
for(i=1; i<=15; i++)
lower[i]=lower[i-1]*2;
while(gets(s))
{
k=0;
j=0;
n=0;
for(i=0; s[i]; i++)
{
if(j&&s[i]==' ')
{
ma[1][++n]=k;
j=0;
k=0;
}
if(s[i]>='0'&&s[i]<='9')
{
k=k*10+s[i]-'0';
j=1;
}
}
if(j)
ma[1][++n]=k;
for(i=2; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d",&ma[i][j]);
cu=0;
for(i=0; i<(1<<n); i++)//储存合法的状态
{
if(i<<1&i)continue;
now[++cu]=i;
}
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++)
for(j=1; j<=cu; j++)
for(k=0; k<n; k++)//因为在二进制中1代表的就是lower[0],如果k从1开始的话,lower[1]=2,就缺少了1的情况
if(lower[k]&now[j])sum[i][j]+=ma[i][k+1];//lower[k]才是有效地
for(i=1; i<=cu; i++)//初始化第一行
dp[1][i]=sum[1][i];
for(i=2; i<=n; i++)
for(j=1; j<=cu; j++)
for(k=1; k<=cu; k++)
{
if(now[j]&now[k])continue;
if(now[j]&(now[k]<<1))continue;//如果和对角线和上面都没有相邻就符合
if(now[j]&(now[k]>>1))continue;
dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]);
}
maxx=-1;
for(i=1; i<=cu; i++)//求出所有状态的最大值
if(maxx<dp[n][i])
maxx=dp[n][i];
printf("%d\n",maxx);
gets(s);
gets(s);
}
return 0;
}

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

  1. HDU 1074 (状态压缩DP)

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

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

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

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

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

  4. hdu 4284 状态压缩dp

    题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间           道路的花费,问可不可以在 指定的 h 个城 ...

  5. HDU 4856 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...

  6. HDU 4640 状态压缩DP 未写完

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...

  7. 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP

    Sitting in Line Problem Description   度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...

  8. HDU 5067 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...

  9. hdu 4539(状态压缩dp)

    题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...

随机推荐

  1. React实战之Ant Design—Upload上传_附件上传

    React实战之Ant Design—Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...

  2. 【工具】---- json-server基本使用

    一.概念 在开发过程中,前端通常需要等待后端开发完接口后,再调用接口渲染相应的数据,这会影响开发效率.而json-server的作用就是为了解决前后端并行开发的痛点,在本地模拟后端接口用来测试前端效果 ...

  3. J - Ananagrams(map+vector)

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  4. 记录一次mysql导入千万条测试数据过慢的问题!

    数据库在没有做任何优化的情况下,使用存储过程,插入1千万条测试数据. CREATE PROCEDURE addmaxdata(IN n int) BEGIN DECLARE i INT DEFAULT ...

  5. LN : Eden Bitset_3

    Appreciation to our TA, 王毅峰, who designed this task. 问题描述 Give you N numbers a[1]...a[n] and M numbe ...

  6. 2) 十分钟学会android--建立第一个APP,执行Android程序

    通过上一节课创建了一个Android的Hello World项目,项目默认包含一系列源文件,它让我们可以立即运行应用程序. 如何运行Android应用取决于两件事情:是否有一个Android设备和是否 ...

  7. 微信小程序组件解读和分析:三、swiper滑块视图

    swiper滑块组件说明: 滑块视图容器,用于展示图片,可以通过用户拖拽和设置自动切换属性控制图片的切换   组件的使用示例的运行效果如下: 下面是WXML代码: [XML] 纯文本查看 复制代码 ? ...

  8. SpringBoot(1.5.6.RELEASE)源码解析

    转自 https://www.cnblogs.com/dylan-java/p/7450914.html 启动SpringBoot,需要在入口函数所在的类上添加@SpringBootApplicati ...

  9. 用rownum先排序后分页

    今天突然想到rownum可以解决分页问题,于是做了各种实验,找个几个文章,最后有了一定成果. 现有表tablename,含有字段showorder,要求提取showorder的第11行到20行数据. ...

  10. Alpha项目测试

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 这个作业要求在哪里 htt ...