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 发一下中文题面(今天考试直接被改了): 生记茶餐厅由于受杀人事件的影响,生意日渐冷清,不得不暂时歇业.四喜赋闲在家,整天抱着零食看电视,在 ...
随机推荐
- 子Div使用Float后如何撑开父Div
如果想要撑开父元素可以采用以下方法: 方法一: 父元素设置overflow以及zoom,样式如下: 1 <style> 2 #div1{border:1px solid red;ove ...
- android studio用法笔记
1.每次创建新工程的时候,就会“check sdk repository”,然而这个进度条一动不动,解决方法:file>setting>plugins>sdk updater禁用就行 ...
- 阿里巴巴高新能数据源com.alibaba.druid.pool.DruidDataSource的jar包配置
aspectjweaver-1.7.4.jar druid-0.2.9.jar 两个包,用于提供com.alibaba.druid.pool.DruidDataSource
- springMvc发布restFull风格的URL
package zpark.controller; import org.springframework.stereotype.Controller; import org.springframewo ...
- ASP.NET利用WINRar实现在线解压缩文件
一.肯定是服务器必须装了winrar这个软件了. 二.创建Helper类,如下: using System; using System.Collections.Generic; using Syste ...
- ElasticSearch的各种服务的URL
1.curl192.168.106.58:9200/_cat/health?v 集群健康查看 epoch timestamp cluster status node.total ...
- 【UR #2】树上GCD
这道题是有根树点分治+烧脑的容斥+神奇的分块 因为是规定1为根,还要求LCA,所以我们不能像在无根树上那样随便浪了,必须规定父亲,并作特殊讨论 因为gcd并不好求,所以我们用容斥转化一下,求x为gcd ...
- jar-下载站点
nutch: http://archive.apache.org/dist/nutch/ jarfire: http://cn.jarfire.org/ solr: http://archive.ap ...
- HTTP协议学习---(五)压缩
HTTP压缩是指: Web服务器和浏览器之间压缩传输的"文本内容"的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少 ...
- android开发之自定义组件
android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...