hdu 2167 状态压缩dp
/*
状态转移方程: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的更多相关文章
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
- HDU 3341 状态压缩DP+AC自动机
题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...
- hdu 2167(状态压缩基础题)
题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...
- hdu 4284 状态压缩dp
题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间 道路的花费,问可不可以在 指定的 h 个城 ...
- HDU 4856 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...
- HDU 4640 状态压缩DP 未写完
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...
- 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP
Sitting in Line Problem Description 度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...
- HDU 5067 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...
- hdu 4539(状态压缩dp)
题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...
随机推荐
- HTML 5.1 -- 14项新增功能及如何使用
最近太忙了 过完年来 连续的加班让我筋疲力尽,今天终于把东西交了,抽空来点干货吧! 1. 响应式图像 W3C 引入了一些功能特性,无需使用 CSS 就可以实现响应式图像.它们是 … srcset 图像 ...
- Java实现短信中提取号码
Description 提取一条短信里所有的电话号码,电话号码之间换行打印,短信的内容由用户输入. Input 第一行有个整数n(1≤n≤1000)表示测试用例的个数.其后的每一行中有一条短信,每一条 ...
- 图片预览------photoswipe 使用
photoswipe 使用 预览图片后,需要点击关闭按钮才能关闭,点击图片事件效果是放大图片,和微信的效果不一致,最后改用微信预览图片的接口了,但是例子可以用,记录一下!! http://www.cn ...
- 解决:阿里云ECS上启动tomcat后,第一次访问时间特别长
Re在ECS上启动tomcat后,第一次访问时间特别长 2017-04-25 10:16:04 INFO com.world.socket.ServerSocketListener 25- ...
- 笔试题的各种trick
%x 默认去掉前导零 #include<stdint.h> #include<stdio.h> union X { int32_t a; struct ...
- SpringBoot-redis-session
配置pom <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- jQuery伪分页效果
如图,我们首先分析在一个页面存放4条内容,其余的超出隐藏(因为这里没有后台数据,所以我们把内容‘写死’),然后就是下面两个按钮(这里我们不用button,因为button有自带的提交功能),然后我们可 ...
- 5步上手体验kettle快捷调度方式
https://my.oschina.net/u/944575/blog/1557410 kettle调度监控最佳实践 https://my.oschina.net/u/1026947/blog/15 ...
- 当点阵字库遇到3D
早在遥远的DOS时代,点阵汉字库为计算机处理汉字起到了关键作用.当时的显示器在图形模式下的分辨率只有640x480甚至320x200,显示汉字直接使用点阵字库在屏幕上打点就可以了.如今的电脑屏幕甚至手 ...
- dorado 7 使用总结
最近项目上需要,使用了dorado 7 ,总体感觉还可以,快速开发很方便,然而在方便的同时,难免有些太过繁琐,很多东西都封装了起来,会造成很多不便.因此快速开发的项目可以使用,其它的不推荐.现在打算将 ...