power oj 2480 放积木[二进制状压DP]
题目链接【https://www.oj.swust.edu.cn/problem/show/2480】
题意:中文题目。
题解:二进制状态转移+坏点判断。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = << ;
LL dp[][maxn];
int mp[];
char s[];
int n, m;
int cur;
void DFS(int r, int pos, int nu, int z, int cnt)
{
if(pos == m)
{
dp[cur][nu] = max(dp[cur][nu], dp[cur ^ ][z] + cnt);
return ;
}
if(mp[r] & ( << pos)) //坏点
{
DFS(r, pos + , nu, z, cnt);
return ;
}
if(!(z & ( << pos)) && !(mp[r - ] & ( << pos)))
DFS(r, pos + , nu | ( << pos), z, cnt + );
else
{
if( pos && !(nu & ( << (pos - ))) && !(mp[r] & ( << (pos - ))) )
DFS(r, pos + , nu | ( << pos) | ( << (pos - )), z, cnt + );
DFS(r, pos + , nu, z, cnt);
}
}
int main ()
{
while(~scanf("%d%d", &n, &m))
{
memset(mp, , sizeof(mp));
for(int i = ; i <= n; i++)
{
scanf("%s", s);
for(int j = ; j < m; j++)
if(s[j] == '*') mp[i] |= << j;
}
cur = ;
memset(dp[], -, sizeof(dp[]));
int mask = ( << m) - ;
dp[][mask] = ;
for(int i = ; i <= n; i++)
{
cur ^= ;
memset(dp[cur], -, sizeof(dp[cur]));
for(int j = ; j <= mask; j++)
if(dp[cur ^ ][j] >= )
DFS(i, , , j, );
}
LL ans = ;
for(int i = ; i <= mask; i++)
ans = max(ans, dp[cur][i]);
printf("%lld\n", ans);
}
return ;
}
power oj 2480 放积木[二进制状压DP]的更多相关文章
- 计蒜客习题:蒜头君的积木 (状压DP 枚举子集)
问题描述 蒜头君酷爱搭积木,他用积木搭了 n 辆重量为 wi的小车和一艘最大载重量为 W 的小船,他想用这艘小船将 n 辆小车运输过河.每次小船运载的小车重量不能超过 W.另外,小船在运载小车时,每辆 ...
- Light OJ 1011 - Marriage Ceremonies(状压DP)
题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少? 状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...
- power oj 1557种树[二进制状压DP]
题目链接[https://www.oj.swust.edu.cn/problem/show/1557] 题意:中文题目. 题解:用0,1表示某个位置是否种了树,先算出同一行的有效状态的总数,即开两个1 ...
- [Swust OJ 581]--彩色的石子(状压dp)
题目链接:http://acm.swust.edu.cn/problem/0581/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- POJ 2411 Mondriaan's Dream/[二进制状压DP]
题目链接[http://poj.org/problem?id=2411] 题意:给出一个h*w的矩形1<=h,w<=11.用1*2和2*1的小矩形去填满这个h*w的矩形,问有多少种方法? ...
- POJ 3279 Fliptile[二进制状压DP]
题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...
- LibreOJ 6177 题解(状压DP)
题面 传送门 分析 刚看到这道题时想的是跟最短哈密顿路类似的二进制状压DP,先用floyd处理距离 但是此题用二进制不够,应该用三进制 0,1,2分别表示未送,正在送,已送完 dp[s][i]表示当前 ...
- POJ1185 状压dp(二进制//三进制)解法
很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...
- 江南OJ 1151 - 还是晒太阳 - [状压DP]
题目链接:校内OJ的题目,就不放链接了. PS.可以说是本次9月月赛唯一的一道有一定难度的题目了. 题解: 考虑状压DP,假设 $sta$ 是一个二进制数,代表当前 $n$ 个人有几个是在队伍里的,剩 ...
随机推荐
- echarts 某省下钻某市地图
因为最近工作需要,接触到了highcharts 与echarts ,对比了一下,目前公司系统用的是highcharts的图表插件,就不想再去用echarts的图标插件了,奈何highcharts地图对 ...
- 根据字节码探讨java自增运算符的原理
public class Test { static int x, y; public static void main(String args[]) { x++; myMethod(); Syste ...
- There is no getter for property named 'userSpAndSp' in 'class com.uauth.beans.UserSpAndSp'
mybatis 报错There is no getter for property named 'userSpAndSp' in 'class com.uauth.beans.UserSpAndSp' ...
- ruby操作mongo DB
web自动化中,对操作日志功能进行验证(操作日志存在mongoDB中). 为了避免前面操作产生的日志影响结果校验,我们需要先清除之前的所有操作日志. require 'mongo' host = '1 ...
- Python print报ascii编码异常的靠谱解决办法
之前遇到此异常UnicodeEncodeError: 'ascii' codec can't encode characters...,都是用这种方式解决:sys.setdefaultencoding ...
- oracle ebs 分类账与法人主体对应关系
--ebs 分类账与法人主体对应关系 SELECT A.SET_OF_BOOKS_ID LEDGER_ID, GL.NAME LEDGER_NAME, GL.CURRENCY_CODE, FFV.FL ...
- 认识div在排版中的作用
在网页制作过程过中,可以把一些独立的逻辑部分划分出来,放在一个<div>标签中,这个<div>标签的作用就相当于一个容器. 语法: <div>-</div&g ...
- JS实现的在线推荐逻辑
import _ from 'lodash';import cfg from '../cfg/cfg';import {Response} from '../shared/lib/response'; ...
- Nuget 学习三
后期管理: 登录 nuget 官网 https://www.nuget.org/ 可以搜索到自己的包: 点击进入,可进一步操作 如果你需要给自己的类型新增其他功能,或者修改之前的bug(反正就是修改代 ...
- CG 标准函数库
(1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回tu ...