【发布时间】:2016-03-10 20:11:02
【问题描述】:
问题陈述是这样的
给定一个二进制矩阵,找出最大尺寸全为 1 的子矩阵。
例如,考虑下面的二进制矩阵。
0 1 1 0 1
1 1 0 1 0
0 1 1 1 0
1 1 1 1 0
1 1 1 1 1
0 0 0 0 0
所有设置位的最大平方子矩阵为3
我创建了一个基于记忆的 dp 解决方案
我的程序是
#include<bits/stdc++.h>
using namespace std;
#define R 6
#define C 5
int getmaxsizesummatrix(int mat[R][C],vector< vector<int> > &v,int r,int c)
{
if(r<0||c<0)
return 0;
if(r==0||c==0)
{
v[r][c]=mat[r][c];
return mat[r][c];
}
if(v[r][c]==-1)
{
int m=INT_MIN;
int flag=1;
for(int j=0;j<=r;j++)
{
for(int k=0;k<=c;k++)
{
int x,y,z;
x = getmaxsizesummatrix(mat,v,j-1,k-1);
y = getmaxsizesummatrix(mat,v,j-1,k);
z = getmaxsizesummatrix(mat,v,j,k-1);
if(mat[j][k]==1)
{
m=max(m,min(x,min(y,z))+1);
}
else
{
m=max(m,min(x,min(y,z)));
}
}
}
return v[r][c] = m;
}
else
{
return v[r][c];
}
}
int main()
{
int M[R][C] = {{0, 1, 1, 0, 1},
{1, 1, 0, 1, 0},
{0, 1, 1, 1, 0},
{1, 1, 1, 1, 0},
{1, 1, 1, 1, 1},
{0, 0, 0, 0, 0}};
vector< vector<int> > v(R+1,vector<int>(C+1,-1));
cout<<getmaxsizesummatrix(M,v,6,5);
return 0;
}
我得到 4 作为输出。
谁能纠正我的方法???
【问题讨论】:
-
练习 CodeJam?
-
请使用调试器,一步一步检查你的变量内容......这将比在这里发布你的代码更有效。
-
learning dp..not for codejam @MarwanAlani
-
我在 ideone.com 中运行您的代码并给我 5 而不是 4...
标签: c++ algorithm matrix dynamic-programming