zoukankan      html  css  js  c++  java
  • ZR#712

    消灭砖块

    题意:

    很多块砖分布在一个 $ m imes m $ 的矩阵中,他可以消掉以他为左上角顶点的一个 $ n imes n $ 的矩阵里的所有砖块。计算可以消掉最多的砖块数(只能消一次)。

    解法:

    和最大子矩阵类似,不过要稍微改变一下条件和状态。
    求前缀和,固定的子矩阵边长,然后把循环和计算那里容斥一下。

    CODE:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    #define LL long long
    #define N 1010
    
    int m,n,k,f[N][N],pre[N][N];
    
    int main() {
        scanf("%d%d%d",&n,&m,&k);
        for(int i = 1 ; i <= k ; i++) {
            int x,y;
            scanf("%d%d",&x,&y);
            f[x][y]++;
        }
        for(int i = 1 ; i <= m ; i++) {
            for(int j = 1 ; j <= m ; j++) {
                pre[i][j] = f[i][j] + pre[i - 1][j];
            }
        }
        int ans = 0;
        for(int i = 1 ; i <= m - n + 1 ; i++) {
            for(int j = 1 ; j <= m - n + 1 ; j++) {
                int sum = 0;
                for(int k = j ; k <= j + n - 1 ; k++) {
                    sum += pre[i + n - 1][k] - pre[i - 1][k];
                    ans = max(ans,sum);
                }
            }
        }
        printf("%d 
    ",ans);
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    Exercise02_09
    Exercise02_05
    Exercise02_01
    Exercise02_03
    Exercise02_07
    web.xml配置详解
    面对不成功的人生
    请不以结婚为目的的恋爱吧
    年轻人能为世界做点什么
    不作就不会活
  • 原文地址:https://www.cnblogs.com/Repulser/p/11391059.html
Copyright © 2011-2022 走看看