HDU 2442
状态压缩DP , 和HDU2280极其相似
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std;
const int N = ;
int dp[N][<<][<<] , n , m; //s 表示当前第i行的状态 , u表示上一行状态 , v表示上上行的状态 , cnt表示到当前位置时总共占据的空间
void dfs(int s , int u , int v , int cnt , int k , int i) //由右到左,访问到第i行的第k位数字
{
if(k >= m){
dp[i][u][s] = max(dp[i][u][s] , cnt);
return;
}
if(k > ){
if(!(s & (<<k)) && !(u & (<<k-)) && !(v & (<<k)))
dfs(s | (<<k) , u | (<<k-) , v | (<<k) , cnt + , k+ , i);
if(!(s & (<<k)) && !(u & (<<k)) && !(v & (<<k-)))
dfs(s | (<<k) , u | (<<k) , v | (<<k-) , cnt + , k+ , i);
}
if(k > ){
if(!(s & (<<k-)) && !(u & (<<k-)) && !(v & (<<k-)))
dfs(s | (<<k-) , u | (<<k-) , v | (<<k-) , cnt + , k+ , i);
if(!(s & (<<k-)) && !(u & (<<k-)))
dfs(s | (<<k-) , u | (<<k-) , v , cnt + , k+ , i);
if(!(s & (<<k)) && !(u & (<<k-)))
dfs(s | (<<k) , u | (<<k-) , v , cnt + , k+ , i);
}
dfs(s, u , v , cnt , k+ , i);
} void dfs2(int s , int u , int cnt , int k)
{
if(k >= m){
dp[][u][s] = max(dp[][u][s] , cnt);
return;
}
if(k > ){
if(!(s & (<<k-)) && !(u & (<<k-)))
dfs2(s | (<<k-) , u | (<<k-) , cnt + , k+);
if(!(s & (<<k)) && !(u & (<<k-)))
dfs2(s | (<<k) , u | (<<k-) , cnt + , k+);
}
dfs2(s,u,cnt,k+);
}
int main()
{
// freopen("a.in","rb",stdin);
while(~scanf("%d%d",&n,&m)){
memset(dp,-,sizeof(dp)); if(n == ){
puts("");
continue;
} dfs2(,,,); for(int i = ; i<=n ; i++){
for(int j = ; j < <<m; j++){
for(int t = ; t<<<m ; t++){
if(dp[i-][t][j]>=){
dfs(,j,t,dp[i-][t][j],,i);
}
}
}
} int ans = ;
for(int i = ; i<<<m ; i++){
for(int j = ; j<<<m ; j++)
{
//cout<<"in: "<<i<<" "<<" "<<j<<" "<<dp[n][i][j]<<endl;
ans = max(ans , dp[n][i][j]);
}
}
printf("%d\n" , ans);
}
return ;
}
HDU 2442的更多相关文章
- 状态压缩DP总结
POJ1185 炮兵部队问题: 在平原上才能放置炮兵,每个炮兵的上下左右2格之内都不能出现别的炮兵 可以考虑在当前行放置炮兵它的右侧和下侧绝对不会出现炮兵即可,左侧和上侧就能省去考虑 明显的状态压缩d ...
- HDU 1710 Binary Tree Traversals (二叉树遍历)
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- HDU——T 2444 The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Memory Limi ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- 离散化+线段树/二分查找/尺取法 HDOJ 4325 Flowers
题目传送门 题意:给出一些花开花落的时间,问某个时间花开的有几朵 分析:这题有好几种做法,正解应该是离散化坐标后用线段树成端更新和单点询问.还有排序后二分查找询问点之前总花开数和总花凋谢数,作差是当前 ...
- Wannafly挑战赛10:A题:小H和迷宫
题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以使怪兽损失a%.b%.c%的血量(之后怪兽的血量会向下取整),小H想合理地运用这三瓶药水,使 ...
- windows8.1专业版 关闭ie11总是已停止工作
该问题通常原因: 1 系统重病毒: 2 系统和安装的软件不兼容导致. 解决方案: 1 杀毒更新至最新进行杀毒,仍未解决,重新安装系统: 2 目前身边人员多数属于该情况: 1 如安装了输入法.迅雷或其它 ...
- css靠左,靠右
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- AJPFX分析int 和integer的区别
int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...
- Swiper插件轮播
<html><head> <meta charset="utf-8"> <title>Swiper轮播</title>& ...
- 虚拟机下安装 CentOS 7 的几个小问题
※ 网络问题(Destination Host Unreachable) 安装时网络选择的"桥接"模式, 安装完毕,并配置IP地址后,发现只能ping通自己,局域网内的其他IP无法 ...
- redis 在windows 集群
前言:为什么自己要花时间写一篇redis集群文章,网上众多的文章大都是思路正确,但是细节不足,这里写一篇文章记录自己部署时候遇到的问题,当下次再部署的时候避免跳入重复的坑. 上篇文章(http://w ...
- apache反向代理配置
apache简单的反向代理配置 Proxypass /api /http://locahost:3000 反向代理-1.jpg
- Activiti数据库表结构(表详细版)
http://blog.csdn.net/hj7jay/article/details/51302829 1 Activiti数据库表结构 1.1 数据库表名说明 Activiti工作流总 ...