zoukankan      html  css  js  c++  java
  • 激光炸弹【模拟】

    题目大意:

    给出一个5000×5000的矩阵,每个格子上都有权值,求用一个n×n的框最多能框住多少?


    思路;

    考虑二位维前缀和,设s[i][j]为以(1,1)为左上角,(i,j)为右下角的矩阵的和。那么根据容斥原理,易得:

    s[i][j]=s[i1][j]+s[i][j1]s[i1][j1]+a[i][j]

    那么再枚举正方形的右下角求出每个矩阵的答案,再取最大值即可。
    ans=max(s[i][j]s[im][j]s[i][jm]+s[im][jm])


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int n,m,s[5011][5011],x,y,lenn,lenm,ans;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            scanf("%d",&s[x+1][y+1]);
        }
        for (int i=1;i<=5001;i++)
         for (int j=1;j<=5001;j++)
          s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+s[i][j];  //二维前缀和
        for (int i=m;i<=5001;i++)
         for (int j=m;j<=5001;j++)
          ans=max(ans,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
        printf("%d\n",ans);
        return 0;
    }
  • 相关阅读:
    Android 存储 SD卡
    Android 存储 内部存储
    Android 存储 SP存储
    go goroutine
    go 接收命令行参数
    go 文件操作 复制和统计字符
    go 文件操作 判断文件是否存在
    換博客了,新地址https://cutepig123.github.io/
    光盘是个好东西
    俺买过的电子产品
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998781.html
Copyright © 2011-2022 走看看