AC通道

神坑的一道题,写了三遍。

两点半开始写的,

第一遍是直接维护两行的二进制。理论上是没问题的,看POJ discuss 上也有人实现了,但是我敲完后准备开始调了。然后就莫名其妙的以为会超时,就删掉了。

第二遍是想错了,因为和之前写过的一道题很像,那道题的正方形最中间不重合即可,所以我以为本质是一样的,然后按照那样的思路写。写写调调到五点半,样例搞掉后,提交,A2T7W1

然后随便找了组数组跟了一下,发现这个方块不允许重合导致这两道题的核心思路差别很大,所以删掉了。

第三遍开始按照自己想的3进制方案写,为了防止再次出现重新写一遍..先找山神问了一下可行性。然后就开始敲,到六点半敲完调完,在校内OJ上交又是各种WA各种TLE,遂弃疗回家,在POJ上看了看发现POJ上的每组数据给了5s,然后发现了几个傻逼错误,改了改终于A调了。

Run ID

User

Problem

Result

Memory

Time

Language

Code Length

Submit Time

16006693

Cydiater

1038

Accepted

17160K

11250MS

G++

3288B

2016-08-22 21:20:49

16006635

Cydiater

1038

Wrong Answer

G++

3290B

2016-08-22 21:10:12

16006634

Cydiater

1038

Wrong Answer

C++

3290B

2016-08-22 21:09:57

16006629

Cydiater

1038

Wrong Answer

C++

3290B

2016-08-22 21:08:53

16006549

Cydiater

1038

Wrong Answer

C++

3290B

2016-08-22 20:56:34

16006543

Cydiater

1038

Memory Limit Exceeded

C++

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.的更多相关文章

  1. POJ 1038 Bugs Integrated, Inc.(DFS + 三进制状压 + 滚动数组 思维)题解

    题意:n*m方格,有些格子有黑点,问你最多裁处几张2 * 3(3 * 2)的无黑点格子. 思路:我们放置2 * 3格子时可以把状态压缩到三进制: 关于状压:POJ-1038 Bugs Integrat ...

  2. POJ 1038 Bugs Integrated, Inc. ——状压DP

    状态压缩一下当前各格子以及上面总共放了几块,只有012三种情况,直接三进制保存即可. 然后转移的时候用搜索找出所有的状态进行转移. #include <map> #include < ...

  3. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    $ POJ~1038~~\times Bugs~Integrated~Inc: $ (复杂的状压DP) $ solution: $ 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前 ...

  4. poj 1038 Bugs Integrated, Inc. 题解

    提供一种代码难度比较简单的做法(可能) 状态表示: 设置状态$ f[i][j] $,表示第 \(i\) 行状态为 \(j\) 的最大放置数,因为这是个阴间题,因为题目内存设置很小,所以要用滚动数组,存 ...

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

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

  6. POJ1038 Bugs Integrated, Inc.

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

  7. poj 2096Collecting Bugs

    题目链接 poj 2096Collecting Bugs 题解 dp[i][j]表示已经找到i种bug,并存在于j个子系统中,要达到目标状态的天数的期望. 显然,dp[n][s]=0,因为已经达到目标 ...

  8. Bugs Integrated, Inc.

    Bugs Integrated, Inc. 给出一个\(n\times m\)的矩形网格图,给出其中K个障碍物的位置,求其中最多能摆的\(2\times 3\)的矩形的个数,\(n\leq 150,m ...

  9. 【CEOI2002】【Poj 1038】Bugs Integrated, Inc.

    http://poj.org/problem?id=1038 发一下中文题面(今天考试直接被改了): 生记茶餐厅由于受杀人事件的影响,生意日渐冷清,不得不暂时歇业.四喜赋闲在家,整天抱着零食看电视,在 ...

随机推荐

  1. 通向高可扩展性之路(WhatsApp篇)---- 脸书花了190亿买来的WhatsApp的架构

    原文链接:http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-bill ...

  2. Android Studio代码混淆插件

    之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆. 截图 第三方库列表清单 ...

  3. word2vec使用说明补充(google工具包)

    [本文转自http://ir.dlut.edu.cn/NewsShow.aspx?ID=253,感谢原作者] word2vec是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的 ...

  4. SqlServer——全文索引

    当我们想要模糊查询时,之前用like %来进行查询,但是为了提高查询速度,提出了全文索引. 全文索引是用空间换取了时间,它将每个表中的数据进行切分存储,这样就能很快的定位到模糊查询的数据. 全文索引快 ...

  5. svn1.8 server client eclipse 插件 配置 完全教程

    svn毋庸置疑,广受欢迎的版本管理软件,我们这里以1.8.10版本为例 本文分三部分 第一部分,服务器端svn安装与配置 第二部分,eclipse下svn插件安装与配置 第三部分,客户端svn简单介绍 ...

  6. Vim块注释

    如何在VIM下快速注释块代码 添加块注释 01.进入视图模式 v进入视图模式,控制方向键选中注释的代码 02.进入列模式并插入# ctrl+v进入列,I插入注释# 03.全部注释 esc两次自动全部注 ...

  7. 屠龙之路_转角遇到服务器大魔王_FourthDay

    Day4:将View打败后,View还送了屠龙团一个信物.于是在今天的旅途中,少年们在遇到View的其他兄弟时,以此信物将他们收于麾下,并借助他们的力量打败了服务器大魔王." Fightin ...

  8. git之旅【第二篇】

    1,git的安装 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.M ...

  9. Entity Framework Code First (八)迁移 Migrations

    创建初始模型和数据库 在开始使用迁移(Migrations)之前,我们需要一个 Project 和一个 Code First Model, 对于本文将使用典型的 Blog 和 Post 模型 创建一个 ...

  10. quartz启动时间配置

    这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , ...