题目链接【https://www.oj.swust.edu.cn/problem/show/1557】

题意:中文题目。

题解:用0,1表示某个位置是否种了树,先算出同一行的有效状态的总数,即开两个1状态不能相邻的状态。

枚举每一行的状态然后根据行一行的状态判断改状态是否有效,然后对最后一行的所有有效状态求最大值即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int bas[], k[], N[];
int dp[][];
char s[];
int n, m, nu;
void init()
{
memset(dp, , sizeof(dp));
memset(bas, , sizeof(bas));
memset(N, , sizeof(N));
nu = ;
}
int main ()
{
while(~scanf("%d%d", &n, &m))
{
if(n == && m == )
break;
init();
for(int i = ; i <= n; i++)
{
scanf("%s", s);
for(int j = ; j < m; j++)
{
if(s[j] == '*')
bas[i] += ( << j);
}
}
for(int i = ; i <= ( << m) - ; i++)
{
if((!(i & (i << ))) && (!(i & (i >> ))))//有效状态
{
k[nu] = i;
int t = i;
while(t)
{
if(t & ) N[nu]++;
t >>= ;
}
nu++;
}
}
for(int j = ; j < nu; j++)
{
if(!(k[j]&bas[]))
dp[][j] = N[j];
}
for(int i = ; i <= n; i++)
{
for(int j = ; j < nu; j++)//i行
{
if(k[j]&bas[i]) continue;//判断第i行
for(int t = ; t < nu; t++)
{
if(k[t]&bas[i - ]) continue; //判断第i-1行
if((k[t]&k[j]) || (k[t] & (k[j] << )) || (k[t] & (k[j] >> ))) continue;
dp[i][j] = max(dp[i][j], dp[i - ][t] + N[j]);
}
}
}
int ans = ;
for(int i = ; i < nu; i++)
ans = max(dp[n][i], ans);
printf("%d\n", ans);
}
return ;
}

power oj 1557种树[二进制状压DP]的更多相关文章

  1. 江南OJ 1151 - 还是晒太阳 - [状压DP]

    题目链接:校内OJ的题目,就不放链接了. PS.可以说是本次9月月赛唯一的一道有一定难度的题目了. 题解: 考虑状压DP,假设 $sta$ 是一个二进制数,代表当前 $n$ 个人有几个是在队伍里的,剩 ...

  2. power oj 2480 放积木[二进制状压DP]

    题目链接[https://www.oj.swust.edu.cn/problem/show/2480] 题意:中文题目. 题解:二进制状态转移+坏点判断. #include<cstdio> ...

  3. POJ 2411 Mondriaan's Dream/[二进制状压DP]

    题目链接[http://poj.org/problem?id=2411] 题意:给出一个h*w的矩形1<=h,w<=11.用1*2和2*1的小矩形去填满这个h*w的矩形,问有多少种方法? ...

  4. POJ 3279 Fliptile[二进制状压DP]

    题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...

  5. LibreOJ 6177 题解(状压DP)

    题面 传送门 分析 刚看到这道题时想的是跟最短哈密顿路类似的二进制状压DP,先用floyd处理距离 但是此题用二进制不够,应该用三进制 0,1,2分别表示未送,正在送,已送完 dp[s][i]表示当前 ...

  6. POJ1185 状压dp(二进制//三进制)解法

    很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...

  7. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压DP + 二进制 + 骚操作

    #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defin ...

  8. Light OJ 1011 - Marriage Ceremonies(状压DP)

    题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少?   状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...

  9. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举

    题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...

随机推荐

  1. oracle保证读一致性原理

    35 这里也有讲解 1:undo segment的概念 当数据库进行修改的时候,需要把保存到以前的old的数据保存到一个地方,然后进行修改,用于保存old数据的segment 就是undo segme ...

  2. data矩阵poj 2778 DNA Sequence

    最近研究data矩阵,稍微总结一下,以后继续补充: ac自动机处理字符串,dp计算谜底,用矩阵来减速     每日一道理 巴尔扎克说过“不幸,是天才的进升阶梯,信徒的洗礼之水,弱者的无底深渊”.风雨过 ...

  3. Js-Html 前端系列--全选,反选

    /* 全选 */ $("#selectedAll").click(function(){ var boxcList = $(".boxc");var boxcL ...

  4. [JAVA] 学java必看书籍

    <java编程思想>,<Effective Java>,<JVM虚拟机规范>     <Java核心技术>    <Java Web开发技术大全& ...

  5. Android第二天

    1.从看得见的活动入手 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

  6. apache2部署django以及静态文件

    django中的runserver只是一个很简单的web服务器,在开发中是不建议使用的,django在官方中建议是使用apache2等web服务器来配置,并且django会把静态文件交由apache2 ...

  7. linux-命令-top

    top 实时动态显示系统状态.(cpu.内存.swap.task) 1. top  汇总cpu.内存.swap.task信息  和  列表展示进程维度的cpu.内存.swap.task信息 2. to ...

  8. jquery新版本不支持toggle()的解决方法

    toggle() 方法用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件. 在1.9以后官方废除了这个方法: 解决如下 在需要调用的js文件下引用 $.fn.toggle = ...

  9. C# 连接 Access 数据库

    c#连接Access 数据库需要System.Data, System.Data.OleDb using System.Data using System.Data.OleDb public OleD ...

  10. hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)

    Problem Description Little John is playing very funny game with his younger brother. There is one bi ...