/*
题意:n行m列的矩阵,1表示可以放东西,0表示不可以。曼哈顿距离为2的两个位置最多只能有一个位置放东西。
问最多放多少个东西。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<math.h>
#include<map>
using namespace std;
const int maxn = ;
const int maxm = ;
const int N = ;
int mat[ maxn ];
int dp[ maxn ][ N ][ N ];
int state[ N ];
int ones_state[ N ];
int Count_ones( int x ){
int cnt = ;
while( x ){
if( x& )
cnt++;
x>>=;
}
return cnt;
}
int init( int n,int m ){
memset( state,,sizeof( state ) );
memset( ones_state,,sizeof( state ) );
int M = <<m;
int cnt = ;
for( int i=;i<M;i++ ){
if( (i&(i<<))==&&(i&(i>>))== ){
state[ cnt ] = i;
ones_state[ cnt ] = Count_ones( i );
cnt++;
}
}
//printf("cnt=%d\n",cnt);最多169种状态!!
return cnt;
}
void DP( int cnt,int n,int m ){
memset( dp,-,sizeof( dp ) );
for( int i=;i<cnt;i++ ){
if( (state[i]&mat[])== )
dp[][i][] = ones_state[ i ];
}//初始化
for( int i=;i<n;i++ ){
for( int j=;j<cnt;j++ ){
if( (state[j]&mat[i])== ){
for( int k=;k<cnt;k++ ){
if( (state[j]&(state[k]<<))==&&(state[j]&(state[k]>>))== ){
for( int k2=;k2<cnt;k2++ ){
if( dp[i-][k][k2]==- ) continue;
if( (state[j]&state[k2])==&&(state[k]&(state[k2]>>))==&&(state[k]&(state[k2]<<))== )
dp[ i ][ j ][ k ] = max( dp[i][j][k],dp[i-][k][k2]+ones_state[j] );
}
}
}
}
}
}
}
int main(){
int n,m;
while( scanf("%d%d",&n,&m)== ){
int cnt = init( n,m );
memset( mat,,sizeof( mat ) );
int tmp;
for( int i=;i<n;i++ ){
for( int j=;j<m;j++ ){
scanf("%d",&tmp);
if( tmp== ){
mat[ i ] |= (<<j);
}
}
}
DP( cnt,n,m );
int ans = ;
for( int i=;i<cnt;i++ )
for( int j=;j<cnt;j++ )
ans = max( ans,dp[n-][i][j]);
printf("%d\n",ans);
}
return ;
}

HDU4539+状态压缩DP的更多相关文章

  1. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  2. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  3. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  4. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

  5. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  6. 状态压缩dp问题

    问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...

  7. BZOJ-1226 学校食堂Dining 状态压缩DP

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...

  8. Marriage Ceremonies(状态压缩dp)

     Marriage Ceremonies Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. HDU 1074 (状态压缩DP)

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

随机推荐

  1. jQuery mouseenter与mouseleave

    mouseenter: 定义和用法 当鼠标指针穿过元素时,会发生 mouseenter 事件. 该事件大多数时候会与 mouseleave 事件一起使用. mouseenter() 方法触发 mous ...

  2. CSS笔记——padding,margin为百分比计算时的参照对象

    div的padding为百分比的两种情况 padding-top,padding-bottom,margin-top,margin-bottom是百分比时是按照当前元素的父级元素的宽度来计算的 1. ...

  3. pthread 实现生产者消费者问题

    经典的生产者消费者问题,在这里用信号量和互斥量来实现生产和消费者模型   #include<cstdlib> #include<cstdio> #include<unis ...

  4. [java学习笔记]java语言基础概述之内存的划分&堆和栈

    1.内存的划分 1.寄存器 cpu处理 2.本地方法区 和所在系统相关 3.方法区 方法加载进内存,其实就是开辟了一块该方法的方法区 方法区中还可以有静态区,用于存放静态变量(类变量) 4.栈内存 5 ...

  5. mysql---用户管理

    #创建用户king , 登陆密码为1234 create user 'king' identified by '1234'; #查看创建用户的语句,即上面那条创建用户的语句 show grants f ...

  6. ng-src作用

    ... <ul class="phones"> <li ng-repeat="phone in $ctrl.phones | filter:$ctrl. ...

  7. mcrypt加密与解密

    $key = 'test'; $result_array = array('name' => 'ta', 'age' => 28); $str = encode($result_array ...

  8. JavaScript 高级程序设计 02-变量、数据类型

    一.JavaScript变量 1.变量的定义 在定义变量时,统一使用关键字var,后跟变量名(即标识符,如果不知道什么是标识符,可以到这去查看),如下 var message; //定义一个变量 注意 ...

  9. Oracle的Export用法

    Oracle 的 Export 命令用于导出数据库信息,既可以导出表结构,也可以导出数据,表空间,或者按用户导出等等.按照通常的说法,该命令主要是用于数据库的迁移或者备份的.下面就介绍一下该命令的部分 ...

  10. NotifyIcon制作任务栏托盘菜单

    常用软件飞信.QQ在任务栏中的图标ICO,以及鼠标移动到图标是右键菜单选项 1.首先制作任务栏图标 this.ShowInTaskbar = true; 2.窗体最小化时或者关闭时隐藏到任务栏,有时候 ...