dp cf B. Maximum Submatrix 2
来源:互联网 发布:沈阳网络电玩城 编辑:程序博客网 时间:2024/06/05 12:07
链接:http://codeforces.com/problemset/problem/375/B#include <algorithm>
可以改变行的位置,求最大的矩形的大小(1的个数,且矩形中只能有1)
思路:
用hash处理
ans[nmax][nmax]先记录每行连续的1的位置
然后转移方程dp[i][j]表示第i列至第j列中有连续的1的行的个数
i >= 1:dp[i][j]+=dp[i-1][j]+dp[i][j+1]-dp[i-1][j+1],sum = max(sum,dp[i][j]*(j-i+1));
i = 0: dp[i][j]+=dp[i][j+1],sum = max(sum,dp[i][j]*(j-i+1));
#include <algorithm>#include <cstring>#include <iostream>#include <cstdio>using namespace std;#define MAX 5005int dp[MAX][MAX];char ans[MAX][MAX];int main(void){int n,m;cin >> n >>m;for(int i = 1;i<=n;i++)scanf("%s",ans[i]);for(int i = 1;i <=n;i++)for(int j = 0;j<m;){int s,e;s = j;while(ans[i][j]=='1'&&j < m)j++;e = j;if(ans[i][s] == '1')dp[s][e-1]++;else j++;}int sum = 0;for(int i = 0; i < m;i++)for(int j = m-1;j >= i;j--){if(i)dp[i][j]+=dp[i-1][j]+dp[i][j+1]-dp[i-1][j+1],sum = max(sum,dp[i][j]*(j-i+1));else dp[i][j]+=dp[i][j+1],sum = max(sum,dp[i][j]*(j-i+1));}cout << sum <<endl;}
0 0
- dp cf B. Maximum Submatrix 2
- cf dp B. Maximum Submatrix 2
- B. Maximum Submatrix 2----dp
- CF:375B - Maximum Submatrix 2 不太像DP(sort的升序快速方法)
- codeforces 375B B. Maximum Submatrix 2(dp)
- CodeForces 375B Maximum Submatrix 2
- CodeForces 375 B. Maximum Submatrix 2
- CodeForce 375B D - Maximum Submatrix 2
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
- CF 376D. Maximum Submatrix 2 枚举+前缀和
- CF 332 B.Maximum Absurdity【DP】
- CodeForces 375B Maximum Submatrix 2(思维)
- Maximum Submatrix 2
- CF 2 B(dp)
- Maximum Submatrix
- cf 414B DP
- cf 264b dp
- CF 573B DP
- 【关键字】一些关键字用法总结
- LeetCode题解——Generate Parentheses
- Unity脚本函数的执行顺序
- POJ1144
- 杂谈之单元测试的必要性
- dp cf B. Maximum Submatrix 2
- hdu 2544 最短路
- 机房收费系统之初体验
- 【Spark】RDD机制实现模型
- 网桥代理大师
- VB编程概述
- 大数开根号(蓝桥杯-矩阵翻硬币)
- 【Spark】Spark容错机制
- 静态 static