HDU 2280 状压DP
用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的更多相关文章
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- HDU 3001 状压DP
有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路 成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...
- hdu 2809(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...
- hdu 2167(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...
- Engineer Assignment HDU - 6006 状压dp
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...
- hdu 3254 (状压DP) Corn Fields
poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...
- HDU 5823 (状压dp)
Problem color II 题目大意 定义一个无向图的价值为给每个节点染色使得每条边连接的两个节点颜色不同的最少颜色数. 对于给定的一张由n个点组成的无向图,求该图的2^n-1张非空子图的价值. ...
- hdu 4739 状压DP
这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
随机推荐
- c#中stringbuilder的方法总结
String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新 ...
- 学JAVA第二十三天,List类型和Set类型
数组,是我们最常用的,但是有时候,我们要用数组,但是又不知道数组的类的长度的时候, 我们java就有一个很好用的工具Collection,这都是java的爸爸的用心良苦,Collection中包含Li ...
- CSS3 按钮特效(一)
1. 实例 2.HTML 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- CentOS 7 下配置 firewalld(firewall-cmd)实现 NAT 转发 软路由
如果配合 DHCP 服务或实现更多功能. ☼ NAT 转发软路由 开启 NAT 转发之后,只要本机可以上网,不论是单网卡还是多网卡,局域网内的其他机器可以将默认网关设置为已开启 NAT 转发的服务器 ...
- CSS定位内容
div.h1 或 p 元素常常被称为块级元素.这意味着这些元素显示为 一块内容,即“块框”.与之相反,span 和 strong 等元素称为“行 内元素”,这是因为它们的内容显示在行中,即 ...
- (Android MVVM)使用Data Binding Library(2)
复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...
- Java线程-线程、程序、进程的基本概念
线程 与进程相似,但线程是一个比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程. 与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间 ...
- 迅为八核cortex a53开发板android/linux/Ubuntu系统
详情请点击了解:http://www.topeetobard.com 店铺:https://arm-board.taobao.com 核心板: 提供1G和2G内存版本,全机器焊接,杜绝手工,批量无忧. ...
- linux 11201(11203) ASM RAC 安装
注意:11G的RAC安装,如果升级,则会新建目录在放软件,原来的不删除,所以所需空间比较大. 1.安装系统,把所有的开发包全部安装上 关掉防火墙和SELinux yum -y install comp ...
- 数组,寻找第K大的数
时间复杂度 O(n) def partition(data,left,right): if (len(data)<=0 or left<0 or right>=len(data)): ...