求子矩阵的最大和
面试题一道,应该是做出来了..
代码如下:
原理就是枚举矩阵的边界 然后用动态规划解决
代码如下:
int get_max(int matrix[3][3],int row,int clou)
{
for(int i = 0;i<row;i++)
{
for(int j = i+1;j<=row;j++)
{
if(j==(i+1))
{
for(int k = 0;k<clou;k++)
{
N[i][j][k] = matrix[k][i];
}
}
else
{
for(int k = 0;k<clou;k++)
{
N[i][j][k] = N[i][j-1][k] + matrix[k][j-1];
}
}
/* for(int k = 0;k<clou;k++)
{
int m = 0;
for(int h= i;h<j;h++)
m += matrix[k][h];
N[i][j][k] = m;
}*/
}
}
int maxt = 0;
for(i = 0;i<row;i++)
for(int j = i+1;j<=clou;j++)
{
int t = max_array(i,j,clou);
cout<<i<<" "<<j<<" "<<t<<endl;
if(t>maxt)
maxt = t;
}
return maxt;
}
void main()
{
int g[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
cout<<get_max(g,3,3);
{
for(int i = 0;i<row;i++)
{
for(int j = i+1;j<=row;j++)
{
if(j==(i+1))
{
for(int k = 0;k<clou;k++)
{
N[i][j][k] = matrix[k][i];
}
}
else
{
for(int k = 0;k<clou;k++)
{
N[i][j][k] = N[i][j-1][k] + matrix[k][j-1];
}
}
/* for(int k = 0;k<clou;k++)
{
int m = 0;
for(int h= i;h<j;h++)
m += matrix[k][h];
N[i][j][k] = m;
}*/
}
}
int maxt = 0;
for(i = 0;i<row;i++)
for(int j = i+1;j<=clou;j++)
{
int t = max_array(i,j,clou);
cout<<i<<" "<<j<<" "<<t<<endl;
if(t>maxt)
maxt = t;
}
return maxt;
}
void main()
{
int g[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
cout<<get_max(g,3,3);
}