nyoj44求最大和 最大矩阵和问题

         简单矩阵dp问题。。。可以把多维矩阵化为一维求最大和。。。。。

简单来说就是可以把第一行和第二行相加。。。然后求最大和,,,第一第二第三相加求最大和等等。。。。然后再从第二行开始,吧第二行第三行相加求最大值,,,

第二第三第四相加的最大和。。。。等等等。。。依此类推。。。。。。。

题目如下。。。。

描述

给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 
例子:
0 -2 -7 0 
9 2 -6 2 
-4 1 -4 1 
-1 8 0 -2 
其最大子矩阵为:

9 2 
-4 1 
-1 8 
其元素总和为15。 

输入
第一行输入一个整数n(0<n<=100),表示有n组测试数据;
每组测试数据:
第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;
随后有r行,每行有c个整数;
输出
输出矩阵的最大子矩阵的元素之和。
样例输入
1
4 4
0 -2 -7 0 
9 2 -6 2 
-4 1 -4 1 
-1 8 0 -2 
样例输出
15

代码:::

}#include<stdio.h>
int str[100][100];
int st[100];
int max1(int st[],int d)
{
int sum=0,x,max=-33333;
for(x=0;x<d;x++)
{
if(sum>0)
sum+=st[x];
else
sum=st[x];
if(sum>max)
max=sum;
}
return max;
}
int main()
{
int a,i,j,c,d;
scanf("%d",&a);
while(a--)
{
scanf("%d%d",&c,&d);
for(i=0;i<c;i++)
for(j=0;j<d;j++)
scanf("%d",&str[i][j]);
int sum=0,m,n,k,max=-3333,ma;
for(i=0;i<c;i++)
{
for(k=0;k<d;k++)
st[k]=0;
for(j=i;j<c;j++)
{
for(k=0;k<d;k++)
st[k]+=str[j][k];
ma=max1(st,d);
if(ma>max)
max=ma;
}
}
printf("%d\n",max);

}
return 0;
}

你可能感兴趣的:(c,测试)