zoukankan      html  css  js  c++  java
  • 【HNOI2003】【BZOJ1218】激光炸弹

    problem

    给出n个点,每个点有一个价值,问一个边长为r的正方形最大能覆盖多大价值。

    solution

    维护二维前缀和即可,复杂度O(n^2)

    注意代码容易被卡:
    MLE:空间太大,只能比5000大一点。以及前缀和开成一个,不要用两个数组。
    RE:空间太小,,不要开5001这样,,x++,y++后会卡点

    codes

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn = 5010;
    int n, m, r, c, a[maxn][maxn];
    int main(){
        ios::sync_with_stdio(false);
        cin>>n>>m;
        r = c = m;
        for(int i = 1; i <= n; i++){
            int x, y, z;
            cin>>x>>y>>z;
            x++; y++;//题目0开始。
            a[x][y] = z;
            r = max(r, x); c = max(c, y);
        }
        for(int i = 1; i <= r; i++)
            for(int j = 1; j <= c; j++)
                a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+a[i][j];
        int ans = 0;
        for(int i = m; i <= r; i++)
            for(int j = m; j <= c; j++)
                ans = max(ans, a[i][j]-a[i-m][j]-a[i][j-m]+a[i-m][j-m]);
        cout<<ans<<'
    ';
        return 0;
    }
  • 相关阅读:
    POJ3246
    .NetCore Docker一次记录
    asp.net利用SmtpClient发送邮件
    Assert类的静态方法
    ado.net 连接数据库
    虚拟目录
    web.config配置详细说明
    图片上传
    .NET操作Excel
    asp.net 数据绑定 -- 时间格式
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444856.html
Copyright © 2011-2022 走看看