BZOJ 3736: [Pa2013]Karty
Description
一个0/1矩阵,求能覆盖所有 \(1\) ,同时不覆盖所有 \(0\) 的矩阵,使这个面积最大.
Sol
DP/悬线法.
首先,所求的矩阵一定可以覆盖所有贴边的悬线.
用悬线法求出,高度为 \(r\) 最大的 \(c\) ,宽度为 \(c\) 最大的高度.
上下左右都要做一遍,然后更新统计答案.
上下的时候统计的是每一个高度,左右的时候统计的是每一个宽度.
这样就可以保证所有矩阵都是一个合法的矩阵了.
我多开了几个数组,发现空间炸了...然后我就开始滚了...
Code
/**************************************************************
Problem: 3736
User: BeiYu
Language: C++
Result: Accepted
Time:6888 ms
Memory:50412 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; #define clr(a) memset(a,0,sizeof(a))
#define debug(a) cout<<#a<<"="<<a<<" "
const int N = 2505; int n,m,ml,mw,s;
int a[N][N],tmp[N][N],f[2][N],L[2][N],R[2][N],l[N],r[N];
int mxc[N],mxr[N]; void work(int mxc[]){
for(int j=1;j<=m;j++) L[0][j]=0,R[0][j]=m+1,f[0][j]=0;
for(int i=1,cur=1;i<=n;i++){
l[0]=0,r[m+1]=m+1;
for(int j=m;j;--j) if(a[i][j]) r[j]=r[j+1];else r[j]=j;
for(int j=1;j<=m;j++) if(a[i][j]){
l[j]=l[j-1],f[cur][j]=f[cur^1][j]+1,L[cur][j]=max(L[cur^1][j],l[j]),R[cur][j]=min(R[cur^1][j],r[j]);
int r=f[cur][j],c=R[cur][j]-L[cur][j]-1;
mxc[r]=min(mxc[r],c);if(!a[i+1][j]){ for(int p=r+1;p<=n;p++) if(mxc[p]) mxc[p]=0;else break; }
}else l[j]=j,f[cur][j]=0,L[cur][j]=0,R[cur][j]=m+1;
cur^=1;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
char ch=getchar();while(ch!='_' && ch!='X') ch=getchar();
for(int j=1;j<=m;j++) a[i][j]=ch=='X',ch=getchar();
}
ml=mw=N,s=0;memset(mxc,0x3f,sizeof(mxc)),memset(mxr,0x3f,sizeof(mxr));
work(mxc);
for(int j=1;j<=m;j++) for(int i=1;i<=n/2;i++) swap(a[i][j],a[n-i+1][j]);
work(mxc);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) tmp[j][i]=a[i][j],a[i][j]=0;
for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) a[i][j]=tmp[i][j];
swap(n,m);
work(mxr);
for(int j=1;j<=m;j++) for(int i=1;i<=n/2;i++) swap(a[i][j],a[n-i+1][j]);
work(mxr);
swap(n,m);
mxr[0]=n+1;
for(int i=n,j=1;j<=m;j++) for(;i>mxr[j];--i) mxc[i]=min(mxc[i],j-1);
for(int i=1;i<=n;i++) if(i*mxc[i]>s) s=i*mxc[i],ml=i,mw=mxc[i];
printf("%d %d\n",ml,mw);
return 0;
}
BZOJ 3736: [Pa2013]Karty的更多相关文章
- bzoj 3837 pa2013 Filary
bzoj 先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界 然后我们每次随机选出一个数\(a_i\ ...
- [BZOJ]3737 [Pa2013]Euler
从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...
- BZOJ3736 : [Pa2013]Karty
显然只需要考虑与障碍点相邻的格子,通过旋转坐标系,可以只考虑障碍点在格子上方的情况. 悬线法求出每个点往上的最长延伸距离$x$,以及往左往右的延伸距离$y$. 那么当$r\geq x$时,$c$至多为 ...
- BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜
Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...
- bzoj 3733: [Pa2013]Iloczyn【dfs】
参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ】3737: [Pa2013]Euler
题意: 求满足\(phi(a)=n\)的\(a\)的个数.(\(n \le 10^{10}\)) 分析 这种题一开始就感觉是搜索= = 题解 首先容易得到 \[\phi(n) = \prod_{i} ...
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- 自然语言7_NLTK中文语料库sinica_treebank
http://www.hankcs.com/program/python/nltk-chinese-corpus-sinica_treebank.html NLTK包含Sinica (中央研究院)提供 ...
- JSON-LD
RDF RDF用于信息需要被应用程序处理而不是仅仅显示给人观看的场合.RDF提供了一种用于表达这一信息.并使其能在应用程序间交换而不丧失语义的通用框架.既然是通用框架,应用程序设计者可以利用现成的通用 ...
- Interesting things in Unity 4.5 you probably didn't know about
http://va.lent.in/interesting-things-in-unity-4-5-you-probably-didnt-know-about/
- Pixel & EM
http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html http://www.thomasphinney.com/2011/03/poi ...
- Struts2的模板和主题theme及自定义theme的使用
Struts2的模板和主题theme及自定义theme 标签: struts2 2016-03-29 11:22 190人阅读 评论(0) 收藏 举报 分类: javaweb(8) Struts2 ...
- webstorm 文件历史找回~ 恢复正确状态~
事情的经过时这样的~ 我写好的HTML 我新下载了sublime text3 用这个打开了下 结果都变乱码了~ 大概截个图 都恢复了 就不瞎搞了 webstorm有错误的记录都有真好~ 恢复的具体操 ...
- Yii2 高级版新建一个 Api 应用
原文地址:http://www.getyii.com/topic/28 先在项目的根目录下复制一份 backend 为 api: cp backend/ api -r 拷贝 api 环境 cp -a ...
- Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
git pull的时候遇到 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y 于 ...
- VIP卡
VIP卡:http://item.taobao.com/item.htm?id=6826715667&ali_refid=a3_420435_1006:1102617497:6::683ff3 ...
- getStyle(),修改样式属性
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...