用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. Service官方教程(1)Started与Bound的区别、要实现的函数、声明service

    Services 简介和分类 A Service is an application component that can perform long-running operations in the ...

  2. Android 线程池系列教程(3) 创建线程池

    Creating a Manager for Multiple Threads 上一课  下一课 1.This lesson teaches you to Define the Thread Pool ...

  3. Android偏好设置(5)偏好设置界面显示多个分组,每个分组也有一个界面

    1.Using Preference Headers In rare cases, you might want to design your settings such that the first ...

  4. 总结用CoreText绘制文本时遇到的问题以及解决办法

    关于CoreText不做解释.用的人自然知道这个是干什么的. 功能非常强大,可以绘制文本,图片等. 这次用的Xcode7.0的版本.所以之前很多方法,现在不能用.也不是不能用,就是有黄色警告很不爽. ...

  5. 转 Docker Swarm vs Kubernetes

    容器化已经改变我们部署软件和微服务开发的方式.如果你刚听说容器, 这篇博客帮你入门. 什么是容器编排 容器能够把服务打包成基本单元,你可以把它部署到任何地方:本地机器.测试环境或者生产系统.但是在生产 ...

  6. ambari-server启动WARN qtp-ambari-client-87] ServletHandler: 563 /api/v1/stacks/HDP/versions/2.4/recommendations java.lang.NullPointerException报错解决办法(图文详解)

      问题详情 来源是,我在Ambari集群里,安装Hue. 给Ambari集群里安装可视化分析利器工具Hue步骤(图文详解 所遇到的这个问题. 然后,去ambari-server的log日志,查看,如 ...

  7. Java多线程——线程的创建方式

    Java多线程——线程的创建方式 摘要:本文主要学习了线程的创建方式,线程的常用属性和方法,以及线程的几个基本状态. 部分内容来自以下博客: https://www.cnblogs.com/dolph ...

  8. bootstrap框架栅格系统使用

    使用的前端框架  bootstrap框架 Bootstrap是一个响应式的框架 我们在使用的时候主要使用的是它的网格系统, 1.bootstrap布局 布局容器:.container(用于固定宽度并支 ...

  9. pandas 选择某几列

    转自:https://blog.csdn.net/aaa_aaa1sdf/article/details/77414387 col_n = ['名称','收盘价','日期'] a = pd.DataF ...

  10. 绿化VSCode

    通过啃源码, 终于找到了解决办法, 设置环境变量: VSCODE_APPDATA=C:\Program Files\VSCode\UserData VSCODE_EXTENSIONS=%VSCODE_ ...