题目大意

要求你在N*M大小的主板上嵌入2*3大小的芯片,不能够在损坏的格子放置,问最多能够嵌入多少块芯片?

题解

妈蛋,这道题折腾了好久,黑书上的讲解看了好几遍才稍微有点眉目(智商捉急),接着看了网上大牛的解题报告和实现代码才弄明白怎么用三进制来进行状态压缩,关键就是理解能够横着放置和竖着放置的条件。由于竖着放置会受到前面两行的影响,这样我们就可以用三进制来表示前面两行的状态了,然后根据前面两行的状态我们也可以得到当前行与前一行的初始状态,之后再根据两个的状态进行放置砖块~~~~具体怎么样的看黑书吧

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 15
int dp[2][60000],pre[MAXN],now[MAXN];
int mp[MAXN*10+5][MAXN];
int s[MAXN],n,m;
int To_ten(int *a)
{
int ret=0;
for(int i=1; i<=m; i++)
ret+=a[i]*s[i];
return ret;
}
void To_three(int *a,int x)
{
for(int i=1; i<=m; i++)
{
a[i]=x%3;
x/=3;
}
}
void dfs(int sum,int x,int y,int status)
{
dp[x][status]=max(dp[x][status],sum);
if(y>=m) return;
if(!pre[y]&&!pre[y+1]&&!now[y]&&!now[y+1])
{
now[y]=2,now[y+1]=2;
int st=To_ten(now);
dfs(sum+1,x,y+2,st);
now[y]=0,now[y+1]=0;
}
if((y+2<=m)&&!now[y]&&!now[y+1]&&!now[y+2])
{
now[y]=2,now[y+1]=2,now[y+2]=2;
int st=To_ten(now);
dfs(sum+1,x,y+3,st);
now[y]=0,now[y+1]=0,now[y+2]=0;
}
dfs(sum,x,y+1,status);
}
int main()
{
int T;
s[0]=0,s[1]=1;
for(int i=2; i<=12; i++)
s[i]=s[i-1]*3;
scanf("%d",&T);
while(T--)
{
int k;
scanf("%d%d%d",&n,&m,&k);
memset(dp,-1,sizeof(dp));
memset(mp,0,sizeof(mp));
while(k--)
{
int x,y;
scanf("%d%d",&x,&y);
mp[x][y]=1;
}
for(int i=1; i<=m; i++)
pre[i]=mp[1][i]+1;
int temp=To_ten(pre);
dp[0][temp]=0;
for(int i=2; i<=n; i++)
{
memset(dp[(i+1)&1],-1,sizeof(dp[(i+1)&1]));
for(int j=0; j<s[m+1]; j++)
if(dp[i&1][j]!=-1)
{
To_three(pre,j);
for(int p=1; p<=m; p++)
if(mp[i][p])
now[p]=2;
else
now[p]=max(0,pre[p]-1);
temp=To_ten(now);
dfs(dp[i&1][j],(i+1)&1,1,temp);
}
}
int ans=0;
for(int i=0; i<s[m+1]; i++)
ans=max(ans,dp[(n+1)&1][i]);
printf("%d\n",ans);
}
return 0;
}

POJ1038 - Bugs Integrated, Inc.(状态压缩DP)的更多相关文章

  1. POJ 1038 Bug Integrated Inc(状态压缩DP)

    Description Bugs Integrated, Inc. is a major manufacturer of advanced memory chips. They are launchi ...

  2. POJ1038 Bugs Integrated, Inc 状压DP+优化

    (1) 最简单的4^10*N的枚举(理论上20%) (2) 优化优化200^3*N的枚举(理论上至少50%) (3) Dfs优化状压dp O(我不知道,反正过不了,需要再优化)(理论上80%) (4) ...

  3. poj1038 Bugs Integrated,Inc. (状压dp)

    题意:N*M的矩阵,矩阵中有一些坏格子,要在好格子里铺2*3或3*2的地砖,问最多能铺多少个. 我的方法好像和网上流传的方法不太一样...不管了.... 由数据范围很容易想到状压dp 我们设某个状态的 ...

  4. POJ1038 Bugs Integrated, Inc.

    题目来源:http://poj.org/problem?id=1038 题目大意: 有一家芯片公司要在一块N*M的板子上嵌入芯片,其中1<=N<=150, 1<=M<=10,但 ...

  5. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  6. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  7. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  8. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

  9. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

随机推荐

  1. Java web 项目搭建

    Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring+Hibernate的架构搭建一个 ...

  2. Google Code Style

    Google开源项目的代码遵循的规范,见这,C++, OC. PS: vim的配色编辑用户主目录下的.vimrc即可.

  3. POJ1328——Radar Installation

    Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...

  4. (转)详解LVS负载均衡之三种工作模型原理和10种调度算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LV ...

  5. Git教程(11)把本地的项目传到远程

    1,在远程建立仓库 得到远程仓库地址,如:  https://github.com/paulboone/ticgit 2,进入到项目根目录,初始化一个本地仓库 $ git init 3,为本地仓库添加 ...

  6. bash 读入文件

    Suppose we have a file contains the following information, termed input_file: A       0 B       1 C ...

  7. linux 查看系统信息命令

    linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...

  8. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  9. MySQL优化器 limit影响的case

    测试的用例中,因为limit的大小不同,而产生了完全不同的执行计划: 1. 测试case: create table t1 ( f1 ) not null, f2 ) not null, f3 ) n ...

  10. 关于广义后缀树(多串SAM)的总结

    之前我们给的SAM的例题,基本上是一个串建SAM的就能做的 如果要建多个串的SAM应该怎么做呢 首先看题,bzoj2780 我一开始的想法是SA以前的弄法,把串拼起来,中间加分隔符做SAM 这题确实可 ...