HDU2167+状态压缩DP
状态压缩dp
详见代码
/*
状态压缩dp
dp[ i ][ j ]:第i行j状态的最大和
dp[i][j] = max( dp[i-1][k]+sum[i][j] );
题意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出
*/
#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 = ;
int sum[ maxn+ ][ <<maxn ];//sum[i][j]:第i行j状态的数字和
int s[ <<maxn ];//合格的状态的集合
int dp[ maxn+ ][ <<maxn ];//dp[i][j]:第i行j状态的最大和
int mat[ maxn+ ][ maxn+ ];
int binary[ maxn+ ];
void init_binary( ){
binary[ ] = ;
for( int i=;i<;i++ ){
binary[ i ] = *binary[ i- ];
}
} int solve( int n ){
int cnt_state = ;
memset( dp,,sizeof( dp ) );
memset( sum,,sizeof( sum ) );
int N = (<<n);
for( int i=;i<N;i++ ){
if( ((i<<)&i)== ){
s[ cnt_state++ ] = i;
}
}//选出无相邻数字的状态
for( int i=;i<n;i++ ){
for( int j=;j<cnt_state;j++ ){
for( int k=;k<n;k++ ){
if( binary[k]&s[ j ] ){
sum[ i ][ j ] += mat[ i ][ k ];
}
}
}
}//预处理出sum值
int ans = ;
for( int i=;i<cnt_state;i++ ){
dp[][ i ] = sum[ ][ i ];
ans = max( ans,dp[][i] );
}
for( int i=;i<n;i++ ){
for( int j=;j<cnt_state;j++ ){
for( int k=;k<cnt_state;k++ ){//前一行的状态
if( (s[j]&s[k])== ){
if( (s[j]&(s[k]<<))== ){
if( (s[j]&(s[k]>>))== ){
dp[ i ][ j ] = max( dp[ i- ][ k ]+sum[ i ][ j ],dp[ i ][ j ] );
}
}
}
}
ans = max( ans,dp[i][j] );
}
}
return ans;
} int main(){
char str[ ];
init_binary();
while( gets( str ) ){
int len = strlen( str );
int n = ;
for( int i=;i<len;i+= ){
mat[][n++] = (str[i]-'')*+str[i+]-'';
}
for( int i=;i<n;i++ ){
gets(str);
int cc = ;
for( int j=;j<len;j+= ){
mat[i][cc++] = (str[j]-'')*+str[j+]-'';
}
}
int ans = solve( n );
printf("%d\n",ans);
getchar();
}
return ;
}
HDU2167+状态压缩DP的更多相关文章
- 状态压缩dp(hdu2167,poj2411)
hdu2167 http://acm.hdu.edu.cn/showproblem.php?pid=2167 给定一个N*N的板子,里面有N*N个数字,选中一些数字,使得和最大 要求任意两个选中的数字 ...
- HDU1565+状态压缩dp
简单的压缩状态 dp /* 状态压缩dp 同hdu2167 利用滚动数组!! */ #include<stdio.h> #include<string.h> #include& ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
随机推荐
- 轻松学习Ionic (二) 为Android项目集成Crosswalk(更新官方命令行工具)
现在集成crosswalk不用这么麻烦了!官方的命令行工具已经能让我们一步到位,省去很多工作,只需在cmd中进入项目所在目录(不能有中文目录,还得FQ),执行: ionic browser a ...
- Linux下如何查看哪些端口处于监听状态
查看某一端口的占用情况: lsof -i:端口号 前提:首先你必须知道,端口不是独立存在的,它是依附于进程的.某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了.下次若某个进程再次开 ...
- dorado需要的包
创建dorado示例中心项目WEB-INF下的lib里的包有很多,包括连接数据库的完整的包,新建的项目,可以直接从这里面拷贝包. 当然如果需要连接mySql数据库,还需要手动导入mySql的包.
- How to: Declare encoding UTF-8 in python
References: http://stackoverflow.com/questions/12238307/declaring-encoding-in-python http://stackove ...
- hdu 1047 Integer Inquiry(高精度数)
Problem Description Oneof the first users of BIT's new supercomputer was Chip Diller. He extended hi ...
- MySQL二进制文件规范安装
演示环境介绍 操作系统:CentOS 6.7 (64位) 二进制包:mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz MySQL 下载地址:http://dev.m ...
- 轻松解决fedora21装完NVIDIA显卡驱动后无法进入gnome问题
本来打算昨天写的,最近感冒了,打点滴,耽搁了! 我用的是联想14寸笔记本,装好了fedora21后,想装个NVIDIA显卡驱动试试,结果和很多人一样无法进入gnome界面,搞了三四个小时终于搞定.下面 ...
- Python3 错误处理 和 测试
try 让我们用一个例子来看看try的机制: try: print('try...') r = 10 / 0 except ZeroDivisionError as e: print('except: ...
- SQL技术内幕一
范式:关系模型的规范化规则. Codd提出的三个数据库范式: 1. 第一范式 第一范式要求表中的每一行都是必须是唯一的.因为关系型数据库是基于集合论的,而集合的定义中,要求每一个元素都是唯一的(在关系 ...
- CentOS 根据命令查所在的包
在工作中经常会遇到想用某个命令机器没装却又不知道命令在哪个包(源码编译不再本文范围内),下面介绍个比较笨的方法可以帮助我们搞定这个问题. 说明:蓝色=命令名称 浅绿=命令参数 ...