用dfs找到状态的最优解

且那个正方形块可以由两个水平块组成,所以无需考虑

 #include <cstdio>
#include <cstring>
#include <iostream> using namespace std;
#define N 1005
int state[N] , n , m , dp[N][<<]; void dfs(int i , int k , int state1 , int state2 , int v)
{
if(k > ){
dp[i][state2] = max(dp[i][state2] , v);
return;
}
if(k <= ){
if(!(state1&(<<k-)) && !(state2&(<<k-))){
dfs(i , k+ , state1 | (<<k-) , state2 | (<<k-) , v+);
}
if(!(state1&(<<k)) && !(state2&(<<k-))){
dfs(i , k+ , state1 | (<<k) , state2 | (<<k-) , v+);
}
if(!(state1&(<<k-)) && !(state2&(<<k-))){
dfs(i , k+ , state1 | (<<k-) , state2 | (<<k-) , v+);
}
if(!(state1&(<<k-)) && !(state2&(<<k))){
dfs(i , k+ , state1 | (<<k-) , state2 | (<<k) , v+);
}
if(!(state2&(<<k-))){
dfs(i , k+ , state1 , state2 | (<<k-) , v+);
}
}
else{
if(!(state1&(<<k-)) && !(state2&(<<k-))){
dfs(i , k+ , state1 | (<<k-) , state2 | (<<k-) , v+);
}
}
dfs(i , k+ , state1 , state2 , v);
} void dfs2(int k , int sta , int v)
{
if(k > ){
dp[][sta] = max(dp[][sta] , v);
return;
}
if(k <= ){
if(!(sta & (<<k-)))
dfs2(k+ , sta | (<<k-) , v+);
}
dfs2(k+ , sta , v);
} int main()
{
// freopen("a.in" , "rb" , stdin);
char a;
while(scanf("%d%d", &n , &m) != EOF){
memset(state , ,sizeof(state));
int all = ;
for(int i = ; i <= n ; i++)
for(int j=; j<= ; j++){
cin>>a;
if(a == ''){
state[i] |= (<<j-);
}
else all++;
} memset(dp , - , sizeof(dp));
dp[][state[]] = ;
dfs2( , state[] , ); for(int i= ; i <= n ; i++){
for(int j = ; j<(<<) ; j++){
if(dp[i-][j] >= ){
dfs(i , , j , state[i] , dp[i-][j]);
}
}
} int maxn = ; for(int i = ; i<(<<) ; i++){
maxn = max(maxn , dp[n][i]);
} int remain = all - maxn;
if(remain <= m) puts("YES");
else puts("NO");
}
return ;
}

HDU 2280 状压DP的更多相关文章

  1. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  2. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  3. hdu 2809(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...

  4. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  5. Engineer Assignment HDU - 6006 状压dp

    http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...

  6. hdu 3254 (状压DP) Corn Fields

    poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...

  7. HDU 5823 (状压dp)

    Problem color II 题目大意 定义一个无向图的价值为给每个节点染色使得每条边连接的两个节点颜色不同的最少颜色数. 对于给定的一张由n个点组成的无向图,求该图的2^n-1张非空子图的价值. ...

  8. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

  9. Travel(HDU 4284状压dp)

    题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...

随机推荐

  1. ES6的新方法实现数组去重

    ES6里新添加了两个很好用的东西,set和Array.from. set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 在这我们可以看见,重复的项目已经被去掉了,包括 ...

  2. 题解报告:hdu 1263 水果

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...

  3. javascript:void(0)与#区别

    javascript:void(0)   鼠标点击时,不会跳转到其他页面,且停留在原地 #   鼠标点击时,不会跳转到其他页面,但会回到顶部

  4. 208 Implement Trie (Prefix Tree) 字典树(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法.注意:你可以假设所有的输入都是小写字母 a-z.详见:https://leetcode.co ...

  5. solr 管理页面详解

    solr 服务器管理界面可以查看系统状态.solr设置.分词检测.查询索引.增减core.查看日志等 1.Dashboard(仪表盘) 访问http://localhost:8080/solr时,出现 ...

  6. 面相切面编程AOP以及在Unity中的实现

    一.AOP概念 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是 ...

  7. 【RSA】在 ASP.NET Core中结合web前端JsEncrypt.JS使用公钥加密,.NET Core使用私钥解密;

    有一个需求,前端web使用的是JsEncrypt把后端给的公钥对密码进行加密,然后后端对其进行解密: 使用的类库如下: 后端使用第三方开源类库Bouncy Castle进行RSA的加解密和生成PEM格 ...

  8. select在数据库中有两种含义

    select在数据库中有两种意思 (1)是赋值的意思(2)是输出,打印的意思我想你问的大概是赋值吧print和 select在数据库中都有打印输出的意思 用法是:select @aa=select* ...

  9. 【C++】异常简述(三):补充之如何看待C++异常

    C++异常的使用,我相信在上文总结的已经比较完整了,本文主要对C++异常这块进行额外的补充. 即使C++将异常纳入标准已经很多年了,但是直到现在都能看到很多坚持不显式使用异常.(包括本人在内,在写的代 ...

  10. apropos - 在 whatis 数据库中查找字符串

    总览 (SYNOPSIS) apropos keyword ... 描述 (DESCRIPTION) apropos 命令在一些特定的包含系统命令的简短描述的数据库文件里查找关键字, 然后把结果送到标 ...