激光炸弹.java 1.3 KB
Newer Older
qq_36480062's avatar
commit  
qq_36480062 已提交
1 2
package 前缀和差分;

qq_36480062's avatar
commit  
qq_36480062 已提交
3 4
import java.util.Scanner;

qq_36480062's avatar
commit  
qq_36480062 已提交
5
/**
qq_36480062's avatar
commit  
qq_36480062 已提交
6
 * 给定一个n*m的大矩阵,在里面求得一个c*c的矩阵
qq_36480062's avatar
commit  
qq_36480062 已提交
7 8 9
 */
public class 激光炸弹 {
    public static void main(String[] args) {
qq_36480062's avatar
commit  
qq_36480062 已提交
10 11 12
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        r = sc.nextInt();
qq_36480062's avatar
commit  
qq_36480062 已提交
13 14 15
        N = r;
        M = r;
        int x, y, v;
qq_36480062's avatar
commit  
qq_36480062 已提交
16 17 18
        while (n-- != 0) {
            x = sc.nextInt();
            y = sc.nextInt();
qq_36480062's avatar
commit  
qq_36480062 已提交
19 20 21 22 23 24
            v = sc.nextInt();
            x++;
            y++;
            N = Math.max(N, x);//求出矩形最大长宽
            M = Math.max(M, y);
            qzh[x][y] += v;
qq_36480062's avatar
commit  
qq_36480062 已提交
25
        }
qq_36480062's avatar
commit  
qq_36480062 已提交
26 27 28
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                qzh[i][j] += qzh[i - 1][j] + qzh[i][j - 1] - qzh[i - 1][j - 1];
qq_36480062's avatar
commit  
qq_36480062 已提交
29
            }
qq_36480062's avatar
commit  
qq_36480062 已提交
30
        }//前缀和
qq_36480062's avatar
commit  
qq_36480062 已提交
31
        long res = 0;
qq_36480062's avatar
commit  
qq_36480062 已提交
32 33 34
        for (int i = r; i <= N; i++) {
            for (int j = r; j <= M; j++) {
                res = Math.max(get(i - r + 1, j - r + 1, i, j), res);
qq_36480062's avatar
commit  
qq_36480062 已提交
35 36
            }
        }
qq_36480062's avatar
commit  
qq_36480062 已提交
37
        //求出最大r-1的矩形
qq_36480062's avatar
commit  
qq_36480062 已提交
38 39 40
        System.out.println(res);
    }

qq_36480062's avatar
commit  
qq_36480062 已提交
41 42
    static int[][] qzh = new int[5010][5010];
    static int n, r, N, M;
qq_36480062's avatar
commit  
qq_36480062 已提交
43

qq_36480062's avatar
commit  
qq_36480062 已提交
44 45
    static int get(int x1, int y1, int x2, int y2) {
        return qzh[x2][y2] - qzh[x1 - 1][y2] - qzh[x2][y1 - 1] + qzh[x1 - 1][y1 - 1];
qq_36480062's avatar
commit  
qq_36480062 已提交
46 47
    }
}