cf#22-B-Bargaining Table-枚举+贪心+dp(最大连续区间和)
2016-01-30 12:01
471 查看
http://codeforces.com/problemset/problem/22/B
cf#22-B 此题与POJ1050一样,求0-1矩阵中的 最大一块子矩阵,1050中是求和最大,本题要求矩阵所有元素为0,都是n^2枚举子矩阵的上下边界,把二维子矩阵逐行累加存到一位数组表示该列之和,然后用o(n)扫描,求连续的最大的零个数
cf#22-B 此题与POJ1050一样,求0-1矩阵中的 最大一块子矩阵,1050中是求和最大,本题要求矩阵所有元素为0,都是n^2枚举子矩阵的上下边界,把二维子矩阵逐行累加存到一位数组表示该列之和,然后用o(n)扫描,求连续的最大的零个数
#include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <cmath> #include <iostream> using namespace std; const double pi=acos(-1.0); const double eps=1e-6; int tm[28][28]; int sum[28][28] ; int tmp[28]; int main() { int n,m; int i,j,k; cin>>n>>m; for (i=1;i<=n;i++) { for (j=1;j<=m;j++) sum[i][j]=sum[i-1][j]; for (j=1;j<=m;j++) { scanf("%1d",&tm[i][j]); sum[i][j]+=tm[i][j]; } } int ans=0; for (i=1;i<=n;i++) { for (j=i;j<=n;j++) { memset(tmp,0,sizeof(tmp)); for (k=1;k<=m;k++) { tmp[k]=sum[j][k]-sum[i-1][k]; } int cun=0; for (k=1;k<=m;k++) { if (tmp[k]==0) { cun++; } else { if (cun==0)continue; if (2*(cun+j-i+1)>ans) ans=2*(cun+j-i+1); cun=0; } } if (cun) if (2*(cun+j-i+1)>ans) ans=2*(cun+j-i+1); } } printf("%d\n",ans); return 0; }
相关文章推荐
- [leetcode] 220. Contains Duplicate III 解题报告
- Linux -磁盘管理 ip http://blog.csdn.net/xh16319/article/details/17272455
- Email List
- UVa442 Matrix Chain Multiplication(栈)
- 使用Genymotion安装APK出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE的解决办法
- HDU 1021:Fibonacci Again
- Location of several networks in brain
- hdoj 1789 Doing Homework again
- HDU2457 DNA repair(AC自动机+DP)
- Hunan University 2008 the 4th Programming Contest - 11135 - The ones to remain
- hdu 1789 Doing Homework again
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- james mail安装总结
- AIDL原理解
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- To Know Where We Are: Positioning-based Photo Retrieval(MMAI 2015 FINAL PROJECT)
- Resource temporarily unavailable
- 去掉NSIS脚本自带的“Please wait while Setup is verifying installer:44%”弹框
- [ERROR] Failed to open log
- http://blog.csdn.net/majian_1987/article/details/44939911