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;
    }
  • 相关阅读:
    Spring-12-spring整合Mybatis
    Spring-11-AOP面向切面编程
    jQuery选择器之表单元素选择器
    phpsmarty分配变量
    angular
    ajax 第四步
    ajax第三步
    php+ajax+jq
    二十三种设计模式[4]
    二十三种设计模式[3]
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444856.html
Copyright © 2011-2022 走看看