题解 | #最大子矩阵#

最大子矩阵

https://www.nowcoder.com/practice/a5a0b05f0505406ca837a3a76a5419b3

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//  知识点:前缀和 和 动态规划
int main() {
    int n;
    cin >> n;
    int nums[n + 1][n + 1], dp[n + 1][n + 1];
    memset(nums, 0, sizeof(nums));    // 一定要初始化!!!,否则会出错
    memset(dp, 0, sizeof(dp));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> nums[i][j];
            dp[i][j] = dp[i - 1][j] + nums[i][j];  // dp[i][j] 统计j列前i个nums的总和
        }
    }
    int ans = INT_MIN;    // ans 初始化为INT_MIN,保证有正确输出
    for (int i1 = 1; i1 <= n; i1++) {
        for (int i2 = i1; i2 <= n; i2++) {
            int sum[n + 1];
            memset(sum, 0, sizeof(sum));
            for (int j = 1; j <= n; j++) {
                int temp = dp[i2][j] - dp[i1 - 1][j];    // temp为j列[i1,i2]的和
                sum[j] = max(sum[j - 1] + temp, temp);   // sum为动态规划求最大矩阵
                ans = max(ans, sum[j]);    // 比较各矩阵大小 
            }
        }
    }
    cout << ans << endl;     // 输出答案
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务