题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了。

分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两行的状态,所以我们需要开设三维数组。

代码实现:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int n,m,a[];
int dp[][][],st[],num,b[]; int suan(int x)
{
int sum=,i;
for(i=; i<=; i++)
{
if((x&))
sum++;
x=x>>;
}
return sum;
} void chushihua()
{
int i,max=<<;
for(i=; i<max; i++)
if((i&(i<<))==&&(i&(i>>))==)
{
st[num]=i;
b[num++]=suan(i);
}
} void solve()
{
int i,j,k,l,p=,max=<<m,res=,temp;
memset(dp,,sizeof(dp));
if(n>=)
for(i=; i<num&&st[i]<max; i++)
{
if((a[]&st[i])!=st[i])
continue;
temp=b[i];
dp[][][i]=temp;
}
if(n>)
{
p=p^;
for(i=; i<num&&st[i]<max; i++)
{
if((a[]&st[i])!=st[i])
continue;
temp=b[i];
for(j=; j<num&&st[j]<max; j++)
{
if((a[]&st[j])!=st[j])
continue;
if((st[i]&(st[j]<<))!=||(st[i]&(st[j]>>))!=)
continue;
if(dp[][j][i]<dp[][][j]+temp)
dp[][j][i]=dp[][][j]+temp;
}
}
for(i=; i<=n; i++)
{
p=p^;
for(j=; j<num&&st[j]<max; j++)
{
if((a[i]&st[j])!=st[j])
continue;
temp=b[j];
for(k=; k<num&&st[k]<max; k++)
{
if((st[j]&(st[k]<<))!=||(st[j]&(st[k]>>))!=)
continue;
if((a[i-]&st[k])!=st[k])
continue;
for(l=; l<num&&st[l]<max; l++)
{
if((a[i-]&st[l])!=st[l])
continue;
if((st[k]&(st[l]<<))!=||(st[k]&(st[l]>>))!=)
continue;
if((st[l]&st[j])!=)
continue;
if(dp[p][k][j]<dp[-p][l][k]+temp)
dp[p][k][j]=dp[-p][l][k]+temp;
}
}
}
}
}
for(i=; i<num&&st[i]<max; i++)
for(j=; j<num&&st[j]<max; j++)
{
temp=dp[p][i][j];
if(temp>res)
res=temp;
}
printf("%d\n",res);
} int main()
{
int i,j,temp;
num=;
memset(b,,sizeof(b));
chushihua();
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,,sizeof(a));
for(i=; i<=n; i++)
{
a[i]=;
for(j=; j<=m; j++)
{
scanf("%d",&temp);
a[i]=(a[i]<<)+temp;
}
}
solve();
}
return ;
}

hdu 4539(状态压缩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 4284 状态压缩dp

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

  4. hdu 2167 状态压缩dp

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

  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 1074(状态压缩dp+记录路径)

    题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...

随机推荐

  1. 修改webapp底图

    从webapp目录可以看出地图归mapManager处理,所以在MapManager.js中找关于加载地图的方法, 很容易在里面找到showMap方法: 下面有另一个方法_showMap方法,查看定义 ...

  2. WAS集群服务的关闭与启动

    WAS集群服务的关闭与启动 欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong),否则作者保留追究版权法律责任. 表述有错误之处,请您留言或邮件(hyl ...

  3. Two Sigma OA

    刚做了两道Two Sigma OA. 还是两道老题, Friend Cycle和Longest Chain. Friend Cycle可以用Union Find来做.优化的时候因为矩阵是沿对角线对称, ...

  4. 289. Game of Life

    题目: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a ce ...

  5. RHEL7-使用Apache服务部署静态网站

    1. 安装Apache服务程序 1.1 在虚拟机中选中光盘镜像,并设置连接 1.2 将光盘设备挂载到/media/cdrom目录 [root@localhost ~]# mkdir -p /media ...

  6. Jquery中用offset().top和offsetTop的比较

    今天,想测试一个div与顶部的距离,用的是.offsetTop,但是offsetTop获得的值,怎么都打印不出来.折腾了半天,打印的结果都是undefined,虽然网上很多资料都说返回的是数值.虽然这 ...

  7. make clean vs make clobber

    make is pretty smart, and picks up what has changed from the last build, so if you run repo sync and ...

  8. What is Entity Framework?

    1.什么是EntityFramework? http://www.entityframeworktutorial.net/what-is-entityframework.aspx Writing an ...

  9. core--主线程

    windows的线程是windows可以分配给cpu的最小单元,对window应用程序的管理,最小的管理单位就是线程.那什么是线程?线程其实什么都不是,只是一个概念,没有实体,又看不见.这个概念的定义 ...

  10. 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)

    设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...