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 发一下中文题面(今天考试直接被改了): 生记茶餐厅由于受杀人事件的影响,生意日渐冷清,不得不暂时歇业.四喜赋闲在家,整天抱着零食看电视,在 ...
随机推荐
- flex弹性布局学习笔记
前言 资料来源于网络,本人只是对此作了一下操作,记录于此以便以后查阅.目的在于梳理自己前端凌乱的知识点. 本文根据 Brian Franco 的一个flexbox.scss库来记录 入职新公司前对移动 ...
- SQL复杂查询和视图(2)
分组查询 SQL可以将检索到的元组按某一条件进行分组,分组是属性值相同的为一组 求每个学生的平均成绩 SELECT sn,AVG(score)FROM scGROUP BY sn 先按sn进行分组,即 ...
- Android出现错误后改正后仍显示错误
今天编Android的时候,layout.xml出现了错误,改正后仍显示错误.试了很多方法. 后来,将原来的复制并删掉,然后再粘贴上去就可以了.
- CSS巩固
1. 浮动元素与非浮动元素在一行,浮动元素不占宽度.所以应将非浮动元素改为浮动,或让非浮动元素的宽度为当前行的宽度. 元素浮动之后,周围的元素会重新排列. 2. 布局找模板,或参考其他网站! 自己进行 ...
- JNI系列——C文件中使用logcat
1.在Android.mk文件中添加:LOCAL_LDLIBS += -llog 注:加载的这个库在NDK对应平台目录下的lib目录中. 2.在C文件中添加如下内容: #include <and ...
- Mybatis学习--Mapper.xml映射文件
简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...
- truncate与delete的区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...
- 那些用JavaScript写的操作系统
之前有人说过Chrome是新的C语言运行环境(Chrome Is The New C Runtime) ,不过笔者更倾向于Web是新的C语言运行环境,而且这种技术绝对没有版权问题,也绝不会被一家公司垄 ...
- hadoop,mapreduce---分布式计算
从图中可以看出,map阶段的shuffle: 例如word count,当内存缓冲区满的时候会写到磁盘,一个spill,每个spill,进行分区,排序,最后将同一个分区word合并在一起,写入到磁盘中 ...
- poj3177 && poj3352 边双连通分量缩点
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12676 Accepted: 5368 ...