POJ1038 - Bugs Integrated, Inc.(状态压缩DP)
题目大意
要求你在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)的更多相关文章
- POJ 1038 Bug Integrated Inc(状态压缩DP)
Description Bugs Integrated, Inc. is a major manufacturer of advanced memory chips. They are launchi ...
- POJ1038 Bugs Integrated, Inc 状压DP+优化
(1) 最简单的4^10*N的枚举(理论上20%) (2) 优化优化200^3*N的枚举(理论上至少50%) (3) Dfs优化状压dp O(我不知道,反正过不了,需要再优化)(理论上80%) (4) ...
- poj1038 Bugs Integrated,Inc. (状压dp)
题意:N*M的矩阵,矩阵中有一些坏格子,要在好格子里铺2*3或3*2的地砖,问最多能铺多少个. 我的方法好像和网上流传的方法不太一样...不管了.... 由数据范围很容易想到状压dp 我们设某个状态的 ...
- POJ1038 Bugs Integrated, Inc.
题目来源:http://poj.org/problem?id=1038 题目大意: 有一家芯片公司要在一块N*M的板子上嵌入芯片,其中1<=N<=150, 1<=M<=10,但 ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
随机推荐
- Spring在代码中获取bean的几种方式
方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObj ...
- [杂题]FZU2190 非提的救赎
中文题,题意不多说. 本来感觉很像dp 其实只要从上到下维护单调性就好了 坑是......这个oj......用cin很容易TLE...... //#include <bits/stdc++.h ...
- C#操作xml文档,cuid,dategridview显示数据
界面 //所有的数据全部在集合中 //dgv控件绑定List集合,List集合中有User类的对象,对象里有属性,把属性绑定到没列的数据上 dgv.Da ...
- Power Station POJ 4045
题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小.如果这样的点有多个,则按升序依次输出. 树型dp #include <cstdio> #include <cstring ...
- WCF 传输的序列化
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService”.[ServiceContract]public interface IService{ [O ...
- caffe简易上手指南(一)—— 运行cifar例子
简介 caffe是一个友好.易于上手的开源深度学习平台,主要用于图像的相关处理,可以支持CNN等多种深度学习网络. 基于caffe,开发者可以方便快速地开发简单的学习网络,用于分类.定位等任务,也可以 ...
- sudo: ./sd_fusing.sh:找不到命令
1. -----
- 制作计算器的代码(C#)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 【HDOJ】3386 Final Kichiku “Lanlanshu”
数位DP.需要注意的是需要特殊处理前导0,另外连续的==匹配,不要计重了,尽量贪心的匹配掉. /* 3886 */ #include <iostream> #include <sst ...
- sublime text2卸载和重新安装
很多同学使用 sublime text2 的时候,出现一些奇怪的bug,且重启无法修复. 于是,就会想到卸载 sublime text2 再重新安装. 然而,你会发现,重新安装后,这个bug任然存在, ...