激光炸弹(二维前缀和问题)

2020.12.30开始学习AcWing算法《算法竞赛进阶指南》;
上传博客方便复习。

在这里插入图片描述

//Wecccccccc
//2021.1.2
#include <iostream>
using namespace std;
int r, n, dp[5010][5010];

int main() {
    
    
	int c = 5001, v = 5001;
	cin >> n >> r;
	r = min(r, 5001);//防止输入的r超出地图范围
	for (int i = 0; i < n; i++) {
    
    
		int x, y, w;
		cin >> x >> y >> w;
		x++;//从1开始算起,不是从0
		y++;
		dp[x][y] += w;
	}
	for (int i = 1; i <= c; i++) {
    
    
		for (int j = 1; j <= v; j++) {
    
    
			dp[i][j] = dp[i][j] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
		}
	}
	int ans = 0;
	for (int i = r; i <= c; i++) {
    
    
		for (int j = r; j <= v; j++) {
    
    
			ans =max(ans, dp[i][j] - dp[i - r][j] - dp[i][j - r] + dp[i - r][j - r]);
		}
	}
	cout << ans << endl;
	return 0;

}

猜你喜欢

转载自blog.csdn.net/m0_51955470/article/details/112084098