最大子矩阵和

一、题目
题目描述:现给出一个N*N矩阵,要求求出拥有最大和的子矩阵的和。例子如下图所示:
在这里插入图片描述
具体解法:引用别人的:

https://blog.csdn.net/qq_39559641/article/details/98721603?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158467517419724845038945%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158467517419724845038945&biz_id=0&utm_source=distribute.pc_search_result.none-task

讲我的理解,给大家借鉴
1、矩阵变成一维矩阵的方法:即第n行m列的值为0行m列到n-1行m列的累加和,sum二维数组为什么空一行,是为防止头一行不能没有加,具体看代码
在这里插入图片描述
2、引用的核心代码的意思是枚举,有行减,和列减

3、代码

#include<stdio.h>
#define N 4
int main(){
	int a[N][N] = { {0,-2,-7,0},
                    {9,2,-6,2},
                    {-4,1,-4,1},
                    {-1,8,0,-2}};
    int sun[N+1][N]={0};
    int remax=0;
    int i,j,k;
    int temp=0;
    //转换为一维数组 
    for(i=1;i<N+1;i++)
       for(j=0;j<N;j++){
       	sun[i][j]=sun[i-1][j]+a[i-1][j];
	}
	//动态规划 
    for(i=0;i<N;i++)
      for(j=i+1;j<N+1;j++){                               //i为N,j为N+1,因为实际是j 
      	temp=0;
      	for(k=0;k<N;k++){
      		temp=temp+sun[j][k]-sun[i][k];                     //减行 
      		if(temp>remax)
      		   remax=temp;
      		if(temp<0)
      		   temp=0;                                        //减列 
		  }
	  }
	  printf("%d",remax);
	  return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值