前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >poj1050最大子矩阵和

poj1050最大子矩阵和

作者头像
全栈程序员站长
发布2022-07-10 17:26:58
2240
发布2022-07-10 17:26:58
举报

大家好,又见面了,我是全栈君。

这篇是看了别人的报告写的,就当是屡屡思路好了.

题目大意。给定一个n阶矩阵(方阵),每一个元素中存在一个数字.任务就是求出一个最大的子矩阵使得矩阵元素之间的和是最大的.

n=100;

1.矩阵A[m][n]的和能够直接 sum+=A[i][j] ( i = 0 to n-1 j=0 to n-1); 还能够求出第i列的和p[i],再将所在列加起来,(当然行是同理的).

2.因此所选的矩阵的行k能够枚举(0<=k<=n-1),此时能够现将列加起来,然后找到这些列中连续最大和就可以.这就是选出的矩阵最大和.

3.在全部矩阵中选出最大和的一个。

代码语言:javascript
复制
/*Source Code
Problem: 1050		User: 
Memory: 388K		Time: 32MS
Language: GCC		Result: Accepted

Source Code*/

    #include <stdio.h>
    int max(int a,int b){
            return a>b?a:b;    }    int main(){            int i,j,k,n;            int ans=-0xfffffff;            int A[101][101]={0};            scanf("%d",&n);            for(i=0;i<n;i++){                    for(j=0;j<n;j++){                            scanf("%d",&A[i][j]);                    }            }            for(i=0;i<n;i++){                    for(j=0;j<n;j++){                            int add[101]={0},d[101]={0};                            for(k=0;k<n;k++){                                    int l;                                    for(l=i;l<=j;l++){                                            add[k]+=A[l][k];                                    }                            }                            d[0]=add[0];                            ans=max(ans,d[0]);                            for(k=0;k<n;k++){                                    d[k]=d[k-1]>0?d[k-1]+add[k]:add[k];                                    ans=max(ans,d[k]);                            }                    }            }            printf("%d\n",ans);            return 0;    }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115265.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年2月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档