1 条题解

  • 0
    @ 2025-12-16 21:05:42

    #include #include #include using namespace std;

    int main() { int n, m, s, t; cin >> n >> m >> s >> t;

    vector<vector<int>> a(n + 1, vector<int>(m + 1, 0));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }
    
    // 二维前缀和
    vector<vector<int>> sum(n + 1, vector<int>(m + 1, 0));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            sum[i][j] = a[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];
        }
    }
    
    int minSum = INT_MAX;
    
    // 枚举所有 s*t 子矩阵的左上角
    for (int i = 1; i + s - 1 <= n; i++) {
        for (int j = 1; j + t - 1 <= m; j++) {
            int x2 = i + s - 1;
            int y2 = j + t - 1;
            int subSum = sum[x2][y2] - sum[i-1][y2] - sum[x2][j-1] + sum[i-1][j-1];
            if (subSum < minSum) {
                minSum = subSum;
            }
        }
    }
    
    cout << minSum << endl;
    
    return 0;
    

    }

    • 1

    信息

    ID
    14535
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者