【题解】最大零矩阵
来源:互联网 发布:度娘软件下载 编辑:程序博客网 时间:2024/06/05 02:41
来源http://codevs.cn/problem/1159/
去年APUC计算概论考试的H题就由此变式而来,到时写了个自以为O(n^4)实际上n^6的枚举,自然没过,当时如果做出来有A=希望。考完srz神犇告诉我了O(n^3)的算法,并没有听懂。一直懒散,直到今天才研究了一下,发现有位省队爷写过论文,十分详尽。
《对最大全零子矩阵的研究》
http://wenku.baidu.com/link?url=BmVcU3ZfKTabjcsNzYHeOkYoHHCU1EnbGu4JKclaORpNcxxubAr0j9y-aYIL8uCwgyCAFC19SUDTnuDHEZLHAkIG6VrmSL7mbS4zKv_G3jG
想了想写出来了n^3的算法,显然是能过的,但是论文中的法6给我留下深刻印象,抽时间一定要实现一下。
自己写的算是法3吧,srz大神的方法,简单有效,尤其是将二维转化为一维的方法和部分和实现O(1)的判断,给我启发很大。
其实很多题目并没有那么难,这道典型的水题卡住我深刻说明了一些问题。
下面法3的AC代码。原题与H题略有不同。
#include<iostream>#include<cstdlib>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;int f[2050][2050],ans,n;int main(){ cin>>n; for(int i=1;i<=n;i++) { int b=0,x=0; for(int j=1;j<=n;j++) { cin>>x; if(!x) { b++; f[i][j]=b; } else b=0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(!f[i][j]) continue; int p=i,q=i; while((p>1&&f[p][j])&&f[p-1][j]>=f[i][j]) { p--; } while((q<n&&f[q][j])&&f[q+1][j]>=f[i][j]) { q++; } ans=max(ans,(q-p+1)*f[i][j]); } } cout<<ans;}
0 0
- 【题解】最大零矩阵
- 最大子矩阵 题解
- 最大子矩阵题解
- HDU1505 最大全零矩阵
- bzoj 1084: [SCOI2005]最大子矩阵 题解
- 【DP】BZOJ1084(SCOI2005)[最大子矩阵]题解
- [DP]【最大全零矩阵】【2015.7.9TEST】E
- 【二分+复杂度分析】2017.5.21杂题[最大矩阵]题解
- 【BZOJ1084】【杂题DP】[SCOI2005]最大子矩阵 题解
- 最长和为零的子数组与最大子矩阵
- 最大矩阵
- 矩阵归零
- 矩阵归零
- 矩阵归零
- LintCode-矩阵归零
- 矩阵置零
- zeros--创建零矩阵
- LintCode: 矩阵归零
- 记一个State Loss断言
- Linux虚拟文件系统(安装根文件系统)
- 曝各城市娶妻成本:深圳208万 程序员成为“妻奴”?
- Android传感器及使用方法
- Unity3D 播放MP4 的几种状态
- 【题解】最大零矩阵
- 【Django】Django命令(Manager.py)
- 有用的网址
- Linux虚拟文件系统之文件系统安装(sys_mount())
- ListView性能优化
- c++ static应用在普通变量
- ORACLE 二次条带化【ASM、RAID说明】
- The Data Scientist's Toolbox ---git&github 基础
- Linux虚拟文件系统之文件系统卸载(sys_umount())