您的位置:首页 > 其它

动态规划——最大子矩阵(hdu1081)

2016-11-20 17:13 190 查看
题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1087

题目描述:

在一个给定的大矩阵中找一个小型的矩阵,使这个矩阵中的元素和最大

解题思路:

这道题与之前所做的最大字段和逻辑上大概一致,把一维扩展到了二维。先求出每一行,每一项,

前n项和纵向和横向的思路一样

#include<stdio.h>
int main ()
{
int map[105][105];
int sum,max,i,j,k,ii,jj,s,n;
while(scanf("%d",&n)!=EOF)
{
if(n<1)
break;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
sum=max=0;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
{
sum=0;
for(k=1;k<=n;k++)
{
s=0;
for(ii=i;ii<=j;ii++)  //从第i行不断往下在i到j列找到某一段矩阵得到最大值
s+=map[k][ii];
sum+=s;
if(sum<0)
sum=0;
if(max<sum)
max=sum;
}
}
printf("%d\n",max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: