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< ...
随机推荐
- Android SQLiteDatabase分析
Android中的数据存储使用的小巧的SQLite数据库. 为了方便java层使用SQLite,android做了大量的封装.提供了一些列的类和API.本文章就揭露这些封装背后的类图关系. 老规矩,首 ...
- Java并发包
刚看到一篇总结的比较全的JUC包总结,转载如下: 1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.con ...
- windows安装gnvm安装教程,node多版本解决方案
本文是实现windows下node多版本管理 Win10专业版 一.安装前准备 安装前请卸载node相关的所有东西!!! 二.gnvm下载 gnvm搜索 http://ksria.com/gnvm/ ...
- 17.UNP第一章 简介
获取时间的客户端代码: //客户端程序 #include "unp.h" int main(int argc, char **argv) { int sockfd, n; ]; s ...
- 2.linux系统命令详解
1 shell shell:命令解释器,根据输入的命令执行相应命令. 1.1 shell家族 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的shell ech ...
- Xcode的一些控制台命令
命令 解释 break NUM 在指定的行上设置断点 bt 显示所有的调用栈帧,该命令可用来显示函数的调用顺序 clear 删除设置在特定源文件.特定行上的断点,其用法为:clear FILENAME ...
- c# TextBox
1. text内容全选事件 textBox1.selectAll(); 2.失去与获取焦点事件 textox1.LostFocus += new EventHandler(txt_LostFocus) ...
- Python3字符串 详解
Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. Python 访问字符串中的值 P ...
- onTouchEvent事件
@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTIO ...
- vue <router-view>没有渲染
将routes中的components换成component