zoukankan      html  css  js  c++  java
  • 轰炸区最优选取

    这是一道水题

    题意是:给你一个n*n的矩阵,让我们找出其中k*k的最大值。

    题解:我们用一个前缀和数组来记录当前位置i,j的前面所有值,即sum[ i ][ j ]是前i*j 矩阵内的所有值的和;

    每次更新的时候我们sum【i】【j】的值为 sum[i][j] += sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];

    然后当我们i和j大于k之后我们来取最大值即可;

    接下来是代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #define ll long long
    using namespace std;
    
    const int inf = 0x3f3f3f3f;
    const int maxn = 100010;
    int a[110][110];
    int sum[110][110];
    int main()
    {
        int n, k;
        cin >> n >> k;
        int maxx = 0;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                cin >> sum[i][j];
                sum[i][j] += sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];
                if (i >= k && j >= k)
                {
                    maxx = max(maxx, sum[i][j] - sum[i - k][j] - sum[i][j - k] + sum[i - k][j - k]);
                }
            }
        }
        cout << maxx << endl;
    }
  • 相关阅读:
    linux内核编译
    字符设备驱动ioctl实现用户层内核层通信
    Linux内核完全剖析基于0.12内核
    KVM分析报告
    kvm的vmcall
    kvm源代码分析
    KVM基本概念
    linux系统调用
    UML的9种图例解析(转)
    SurfaceView的基本使用(转)
  • 原文地址:https://www.cnblogs.com/csxaxx/p/13360372.html
Copyright © 2011-2022 走看看