题解 | 最大子矩阵

最大子矩阵

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

#include <bits/stdc++.h>
using namespace std;
int N, A[105][105], sum[105][105], column[105], maxS = INT_MIN;

// 最大子数组和
int calculate(){
    vector<int> dp(N + 1);
    int ret = INT_MIN;
    for(int i = 1; i <= N; i++){
        dp[i] = max(column[i], dp[i - 1] + column[i]);
        ret = max(ret, dp[i]);
    }
    return ret;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> N;
    for(int i = 1; i <= N; i++){
        for(int j = 1; j <= N; j++){
            cin >> A[i][j];
            sum[i][j] = sum[i - 1][j] + A[i][j]; // 计算每列的前缀和
        }
    }

    for(int i = 1; i <= N; i++){ // 起始行
        for(int j = i; j <= N; j++){ // 终止行
            for(int k = 1; k <= N; k++){ // 计算 i~j行 第k列的和
                column[k] = sum[j][k] - sum[i - 1][k];
            }
            maxS = max(maxS, calculate());
        }
    }
    cout << maxS;

    return 0;
}

全部评论

相关推荐

在下uptown:哈哈哈哈,大家仿佛形成了AI项目+商城的统一套路[笑cry不过该说不说整体还可以
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务