POJ 1038 Bugs Integrated, Inc.
神坑的一道题,写了三遍。
两点半开始写的,
第一遍是直接维护两行的二进制。理论上是没问题的,看POJ discuss 上也有人实现了,但是我敲完后准备开始调了。然后就莫名其妙的以为会超时,就删掉了。
第二遍是想错了,因为和之前写过的一道题很像,那道题的正方形最中间不重合即可,所以我以为本质是一样的,然后按照那样的思路写。写写调调到五点半,样例搞掉后,提交,A2T7W1
然后随便找了组数组跟了一下,发现这个方块不允许重合导致这两道题的核心思路差别很大,所以删掉了。
第三遍开始按照自己想的3进制方案写,为了防止再次出现重新写一遍..先找山神问了一下可行性。然后就开始敲,到六点半敲完调完,在校内OJ上交又是各种WA各种TLE,遂弃疗回家,在POJ上看了看发现POJ上的每组数据给了5s,然后发现了几个傻逼错误,改了改终于A调了。
Run ID |
User |
Problem |
Result |
Memory |
Time |
Language |
Code Length |
Submit Time |
16006693 |
Accepted |
17160K |
11250MS |
3288B |
2016-08-22 21:20:49 |
|||
16006635 |
Wrong Answer |
3290B |
2016-08-22 21:10:12 |
|||||
16006634 |
Wrong Answer |
3290B |
2016-08-22 21:09:57 |
|||||
16006629 |
Wrong Answer |
3290B |
2016-08-22 21:08:53 |
|||||
16006549 |
Wrong Answer |
3290B |
2016-08-22 20:56:34 |
|||||
16006543 |
Memory Limit Exceeded |
3290B |
2016-08-22 20:55:59 |
不要问我为什么前五次代码长度一摸一样==
不说废话,我说说我的想法,好像效率很低,但是比较好理解吧(至少我很好理解
基本的和普通的状压DP一样,一个线扫下来枚举状态。但是状态的表示用三进制表示用四进制处理,具体实现比较麻烦,可以参考代码。
0->未被覆盖
1->被覆盖
2->被覆盖且下方的方块也被覆盖
剩下的就很好搞了。
时间的话把枚举的状态改成堆或许会好点?
//OJ 1391 //by Cydiater //2016.8.22 #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cstdlib> #include <cmath> #include <ctime> #include <iomanip> #include <queue> #include <map> #include <algorithm> using namespace std; #define ll long long #define up(i,j,n) for(ll i=j;i<=n;i++) #define down(i,j,n) for(ll i=j;i>=n;i--) <<; const int oo=0x3f3f3f3f; inline ll read(){ ,f=; ;ch=getchar();} +ch-';ch=getchar();} return x*f; } ll N,M,K,f[][MAXN],ans=,T; ][]; namespace solution{ void print(ll s){ ll a[]; memset(a,,sizeof(a)); down(i,M,){ a[i]=s%; s/=; } up(i,,M)cout<<a[i];; puts(""); } inline ll get(ll s,ll pos){ pos=M-pos-; ll tmp=s&(<<(pos<<)); tmp>>=(pos<<); return tmp; } inline ll updata(ll s,ll st,ll nd,ll num){ ll ss=st,n=nd; st=M-n-;nd=M-ss-; up(i,st,nd)s|=(num<<(i<<)); return s; } void init(){ memset(f,,sizeof(f)); memset(flag,,sizeof(flag)); N=read();M=read();K=read(); ans=; up(i,,K){ ll x=read(),y=read()-; flag[x][y]=; } } bool check(ll x,ll st,ll nd,ll s){ ||st>=M||nd<||nd>=M||x<=||x>N) ; up(i,st,nd);/*special case*/ up(i,st,nd)) ; ; } void dfs(ll x,ll y,ll s,ll now,ll k){ ){ f[x%][now]=max(f[x%][now],f[(x%)^][s]+k); ans=max(ans,f[x%][now]); /*puts("s:");print(s);puts("now:");print(now); printf("x:%d f[x%%2][now]:%d ",x,f[x%2][now]); cout<<"k:"<<k<<" ans:"<<ans<<endl<<endl;*/ return; } //cout<<now<<endl; ){ now|=(<<((M-y-)<<)); dfs(x,y-,s,now,k); return; } ,y-,y+,s),y+,now),s,updata(now,y-,y+,),k+); ,y,y+,s),now)][y]&&!flag[x+][y+]&&x+<=N,s,updata(now,y,y+,),k+); dfs(x,y-,s,now,k); } void dp(){ f[][]=; up(i,,N){ up(s,,(<<(M<<))-)f[(i%)^][s]=; up(s,,(<<(M<<))-)][s]>)dfs(i+,M-,s,,); } } void output(){ cout<<ans-<<endl; } } int main(){ //freopen("input.in","r",stdin); //freopen("output.out","w",stdout); using namespace solution; T=read(); while(T--){ init(); dp(); output(); } ; }
POJ 1038 Bugs Integrated, Inc.的更多相关文章
- POJ 1038 Bugs Integrated, Inc.(DFS + 三进制状压 + 滚动数组 思维)题解
题意:n*m方格,有些格子有黑点,问你最多裁处几张2 * 3(3 * 2)的无黑点格子. 思路:我们放置2 * 3格子时可以把状态压缩到三进制: 关于状压:POJ-1038 Bugs Integrat ...
- POJ 1038 Bugs Integrated, Inc. ——状压DP
状态压缩一下当前各格子以及上面总共放了几块,只有012三种情况,直接三进制保存即可. 然后转移的时候用搜索找出所有的状态进行转移. #include <map> #include < ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
$ POJ~1038~~\times Bugs~Integrated~Inc: $ (复杂的状压DP) $ solution: $ 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前 ...
- poj 1038 Bugs Integrated, Inc. 题解
提供一种代码难度比较简单的做法(可能) 状态表示: 设置状态$ f[i][j] $,表示第 \(i\) 行状态为 \(j\) 的最大放置数,因为这是个阴间题,因为题目内存设置很小,所以要用滚动数组,存 ...
- 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.
题目来源:http://poj.org/problem?id=1038 题目大意: 有一家芯片公司要在一块N*M的板子上嵌入芯片,其中1<=N<=150, 1<=M<=10,但 ...
- poj 2096Collecting Bugs
题目链接 poj 2096Collecting Bugs 题解 dp[i][j]表示已经找到i种bug,并存在于j个子系统中,要达到目标状态的天数的期望. 显然,dp[n][s]=0,因为已经达到目标 ...
- Bugs Integrated, Inc.
Bugs Integrated, Inc. 给出一个\(n\times m\)的矩形网格图,给出其中K个障碍物的位置,求其中最多能摆的\(2\times 3\)的矩形的个数,\(n\leq 150,m ...
- 【CEOI2002】【Poj 1038】Bugs Integrated, Inc.
http://poj.org/problem?id=1038 发一下中文题面(今天考试直接被改了): 生记茶餐厅由于受杀人事件的影响,生意日渐冷清,不得不暂时歇业.四喜赋闲在家,整天抱着零食看电视,在 ...
随机推荐
- JVM内存管理------GC简介
为何要了解GC策略与原理? 原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题.如果对GC策略与原理不了解的情况下碰到了前面所说的问题,很多时候会让 ...
- jquery 选择器大全
jquery 选择器大体上可分为4 类: 1.基本选择器 2.层次选择器 3.过滤选择器 4.表单选择器 其中过滤选择器可以分为: 1.简单过滤选择器 2.内容过滤选择器 3.可见性过滤选择器 4.属 ...
- [BZOJ1564][NOI2009]二叉查找树(区间DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1564 分析: 首先因为每个点的数据值不变,所以无论树的形态如何变,树的中序遍历肯定不变 ...
- Competition-based User Expertise Score Estimation-20160520
1.Information publication:sigir 2011 author:Jing Liu Harbin Institute of TechnologyMicrosoft Researc ...
- php file_get_contents失败[function.file-get-contents]: failed to open stream: HTTP request failed!解决
在使用file_get_contents方法来获取远程文件时会出现 [function.file-get-contents]: failed to open stream: HTTP request ...
- Windows配置mycat
MyCat使用Mysql的通讯协议模拟成一个MySQl服务器,并建立了完整的Schema(数据库).Table(数据表).User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNod ...
- Ubuntu14.04下jdk的安装
1.下载JDK目前最新的JDK版本是:Java SE Development Kit 8u52.解压安装我们把JDK安装到这个路径:/usr/lib/jvm如果没有这个目录(第一次当然没有),我们就新 ...
- iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)
一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-= +=,每次滚动的时候,会频繁调用x ...
- Maven_Build_Resources
功能:主要用于打包资源文件,默认情况下maven只打包src/main/resource下的资源,通过 1.设置build_resources 2.使用build-helper-maven-plugi ...
- 【CodeVS 1037】取数游戏
http://codevs.cn/problem/1037/ Alice必胜是Alice将硬币移向边权为0的一端并且把经过的边变为0,让BoB无路可走. 这样只要起点到两个方向最近的0边权的端点的边数 ...