poj_1185状压dp
用二维数组写了好久,失败啊。。
#include<iostream>
#include<string.h>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int dp[110][110][110];
char st[110][12];
int s[110],an[110],as[110];
int convert(int n)
{
int cnt=0;
while(n>0)
{
if(n%2)cnt++;
n/=2;
}
return cnt;
}
int main()
{
int cnt=0;
memset(s,0,sizeof(s));
for(int i=0;i<=(1<<10);i++)
{
if(!(i&(i<<1)))
if(!(i&(i<<2)))
{as[cnt]=i;s[cnt]=convert(i);cnt++;} }
while(cin>>n>>m)
{
int nallstatus=2<<(m-1);
memset(dp,-1,sizeof(dp));
memset(st,'\0',sizeof(st));
memset(an,0,sizeof(an));
for(int i=0; i<n; i++)
scanf("%s",st[i]);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(st[i][j]=='H')
an[i]|=(1<<j);
for(int j=0; as[j]<nallstatus; j++)
{
if(!(as[j]&an[0]))
{dp[0][0][j]=s[j];
}
}
for(int i=1;i<n;i++)
for(int j=0;as[j]<nallstatus;j++)
for(int k=0;as[k]<nallstatus;k++)
for(int l=0;as[l]<nallstatus;l++)
{
int state=1;
if(as[j]&an[i]) state=0;
if(as[j]&as[k]) state=0;
if(as[j]&as[l]) state=0;
if(as[k]&as[l]) state=0;
if(as[k]&an[i-1]) state=0;
if(as[l]&an[i-2]) state=0;
if(state)
{
dp[i][k][j]=max(dp[i][k][j],dp[i-1][l][k]+s[j]);
/*if(i==3&&as[j]==4)
{
cout<<s[k]<<s[j]<<dp[i-2][as[l]]<<dp[i][as[j]]<<endl;
cout<<as[k]<<as[l]<<endl;
}*/
}
}
/*for(int i=0;i<n;i++)
{
for(int j=0;as[j]<nallstatus;j++)
cout<<dp[i][as[j]];
cout<<endl;
}*/
/*for(int i=0;as[i]<nallstatus;i++)
cout<<dp[0][as[i]]<<as[i]<<endl;*/
int cur=0;
for(int i=0;as[i]<nallstatus;i++)
for (int j=0;as[j]<nallstatus;j++)
cur=max(cur,dp[n-1][i][j]);
cout<<cur<<endl;
}
return 0;
}
poj_1185状压dp的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
随机推荐
- Spark SQL Catalyst源代码分析之Analyzer
/** Spark SQL源代码分析系列文章*/ 前面几篇文章解说了Spark SQL的核心运行流程和Spark SQL的Catalyst框架的Sql Parser是如何接受用户输入sql,经过解析生 ...
- hdu2767 Proving Equivalences,有向图强联通,Kosaraju算法
点击打开链接 有向图强联通,Kosaraju算法 缩点后分别入度和出度为0的点的个数 answer = max(a, b); scc_cnt = 1; answer = 0 #include<c ...
- js 数据类型判断
判断type类型 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } ...
- StatusBarUtils工具类
import android.app.Activity; import android.app.Dialog; import android.content.Context; import andro ...
- ffmpeg常用指令
在osx系统下通过ffmpeg查看设备 ffmpeg -f avfoundation -list_devices true -i "" -f 指定的是输入输出格式, -i指定输入的 ...
- 任何抛开业务谈大数据量的sql优化都是瞎扯
周三去某在线旅游公司面试.被问到了一个关于数据量大的优化问题.问题是:一个主外键关联表,主表有一百万数据,外键关联表有一千万的数据,要求做一个连接. 本人接触过单表数据量最大的就是将近两亿行历史数据( ...
- Git 版本控制原理
git 工作原理图 如上图所示,有三个区域Working Directory.stage.master. 名词解释: 工作区(Working Directory) 在我们直接编辑文件(文件夹)的根目录 ...
- SQL基本语句:1.模式 3.索引
每次很长时间不用sql语句之后,都需要把基础的捡一捡,索性做个笔记,以后可以长看
- css pointer-event
详见:张鑫旭 CSS3 pointer-events:none应用举例及扩展 pointer-events:none ,可以使事件穿透, 如: 2 覆盖在 1 上面. 给 2 设置 pointer-e ...
- Ubuntu_18.04安装网易云音乐
首先到网易云音乐官网下载网易云音乐,ubuntu版的,安装. 这时候的图标打不开,缺少libcanberra sudo apt install libcanberra-gtk-module 安装完了配 ...