hdu 1185 状压dp 好题 (当前状态与上两行有关系)
/*
状压dp
刚开始&写成&&看了好长时间T0T.
状态转移方程
dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);(第i行的第j个状态有上一行的第k个状态得到)
num[i][j]有两个功能,第一:判断第i行第j个状态是否合法
第二:判断第i行第j个状态的数目
*/
#include<stdio.h>
#include<string.h>
#define N 110
int dp[N][N][N];
char s[N][N];
int len;
int ss[N],ans,num[N][N];
int n,m;
int lower[20];
int f(int i,int d)
{
int k=0,j;
for(j=0; j<m; j++)
{
if(lower[j]&d&&s[i][j+1]=='H')return -1;
if(lower[j]&d&&s[i][j+1]=='P')k++;
}
return k;
}
int Max(int v,int vv)
{
return v>vv?v:vv;
}
void slove()
{
int i,j,k,l;
memset(dp,-1,sizeof(dp));
len=0;
for(i=0; i<(1<<m); i++)
{
if(((i<<1)&i)||((i<<2)&i))continue;
ss[len++]=i;
}
memset(num,-1,sizeof(num));
for(i=1; i<=n; i++)
for(j=0; j<len; j++)
{
k=f(i,ss[j]);
if(k!=-1)
num[i][j]=k;
//printf("%d %d %d\n",i,j,num[i][j]);
}
for(i=0; i<len; i++)//初始化第一行
{
num[0][i]=0;
if(num[1][i]==-1)continue;
dp[1][0][i]=num[1][i];//因为0的是否没有下面ss[j]&ss[l]的限制
if(ans<dp[1][0][i])
ans=dp[1][0][i];
}
for(i=2; i<=n; i++)
for(j=0; j<len; j++)
{
if(num[i][j]==-1)continue;
for(k=0; k<len; k++)
{
if(num[i-1][k]==-1)continue;
for(l=0; l<len; l++)
{
if(num[i-2][l]==-1)continue;
if(ss[j]&ss[k])continue;
if(ss[j]&ss[l])continue;
if(dp[i-1][l][k]==-1)continue;
dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);
// printf("%d %d %d %d %d %d\n",i,num[i][j],dp[i][k][j],dp[i-1][l][k],ss[j],ss[k]);
if(ans<dp[i][k][j])
ans=dp[i][k][j];
}
}
}
return ;
}
int main()
{
int i;
lower[0]=1;
for(i=1; i<=12; i++)
lower[i]=lower[i-1]*2;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1; i<=n; i++)
scanf("%s",s[i]+1);
ans=-1;
slove();
printf("%d\n",ans);
}
return 0;
}
hdu 1185 状压dp 好题 (当前状态与上两行有关系)的更多相关文章
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
- HDU 3001 状压DP
有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路 成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...
- hdu 2167(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...
- Doing Homework HDU - 1074 (状压dp)
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...
- hdu 2809(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...
- hdu 2686(状压dp)
题目链接:http://poj.org/problem?id=2686 思路:典型的状压dp题,dp[s][v]表示到达剩下的车票集合为S并且现在在城市v的状态所需要的最小的花费. #include& ...
- Engineer Assignment HDU - 6006 状压dp
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...
- 【bzoj1087】【互不侵犯King】状压dp裸题(浅尝ACM-D)
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=54329606 向大(hei)佬(e)势力学(di ...
随机推荐
- FPGA基础入门篇(四) 边沿检测电路
FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...
- (DP)51NOD 1049 最大子段和
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5 ...
- sql 索引详解
索引的重要性 数据库性能优化中索引绝对是一个重量级的因素,可以说,索引使用不当,其它优化措施将毫无意义. 聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Ind ...
- C#多线程,基础知识很重要
本文通过介绍C#多线程的用法(基础玩法),附加介绍一下WinForm里边跨线程访问UI的方法 如图,就是这么一个简单的界面,每个按钮下面一个方法,分别设置文本框里边的内容,那么,开始吧! 先介绍一下W ...
- layui 动态左树导航栏显示样式BUG规避
先看问题现象: 使用 layui 的左树功能,先在html页面添加左树功能引入 <ul class="layui-nav layui-nav-tree layui-nav-side&q ...
- 题解报告:poj 3669 Meteor Shower(bfs)
Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...
- Using 10053 Trace Events and get outline
When it comes to performance tuning, we can spend time on one or both ends of the problem. On the &q ...
- SQL在一张表中根据父ID获取所有的子ID
with a as ( select id,name,parentid from categories where id=53 union all select x.id,x.name,x.paren ...
- LN : leetcode 217 Contains Duplicate
lc 217 Contains Duplicate 217 Contains Duplicate Given an array of integers, find if the array conta ...
- [ CodeForces 1064 B ] Equations of Mathematical Magic
\(\\\) \(Description\) \(T\) 组询问,每次给出一个 \(a\),求方程 \[ a-(a\oplus x)-x=0 \] 的方案数. \(T\le 10^3,a\le 2^{ ...