当前位置: 首页 > article >正文

备战蓝桥杯:二维前缀和之激光炸弹

由于xi yi在0到5000之间,我们之前学的前缀和模板都是从下标1开始,我们就把x和y各自加1就好了,也就是在1到5001之间了,题目又说了,同一位置可能有多个目标,所以我们在一个位置求价值的时候应该用加等来求和

我们回顾一下之前构建前缀和数组的公式

公式应该是f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j]

之后我们要求炸毁的最大价值,就要枚举出所有变成为m的正方形,于是乎我们就可以从m,m这个坐标开始依次往后枚举,每次枚举的坐标是x2,y2  那么左上角的坐标就应该是 x2-m+1,y2-m+1

再结合我们之前学的求两点之间的矩形面积的公式

D=U-(A+B)-(A+C)+A 也就是D = f[x2][y2]-f[x1-1][y2]-f[x2][y1-1]+f[x1-1][y1-1]

好了,我们直接来写代码吧

#include <iostream>
using namespace std;
const int N = 5010;
int n, m;
typedef long long LL;
int a[N][N];
int f[N][N];

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		int x, y, v; cin >> x >> y >> v;
		x++, y++;
		a[x][y] += v;
	}

	n = 5001;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + a[i][j];
		}
	}
	int ret = 0;
	for (int x2 = m; x2 <= n; x2++)
	{
		for (int y2 = m; y2 <= n; y2++)
		{
			int x1 = x2 - m + 1, y1 = y2 - m + 1;
			ret = max(ret, f[x2][y2] - f[x1 - 1][y2] - f[x2][y1 - 1] + f[x1 - 1][y1 - 1]);
		}
	}
	cout << ret << endl;

	return 0;
}


http://www.kler.cn/a/536024.html

相关文章:

  • PySpark学习笔记5-SparkSQL
  • 老游戏回顾:G2
  • CSS(三)less一篇搞定
  • 【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+JavaC++Python解析)
  • 【多线程】线程池核心数到底如何配置?
  • Spark--如何理解RDD
  • Java面试题-Java基础
  • 基础入门-算法解密散列对称非对称字典碰撞前后端逆向MD5AESDESRSA
  • C++:代码常见规范1
  • 七。自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • Mac: docker安装以后报错Command not found: docker
  • ctf网络安全大赛python ctf网络安全大赛
  • 本文主要详细讲解ArcGIS中的线、多线段和多边形的结构关系。
  • Kafka 可靠性探究—副本刨析
  • 关于maven的java面试题汇总
  • 1 Java 基础面试题(上)
  • 物联网实训室解决方案(2025年最新版)
  • BUU26 [极客大挑战 2019]HardSQL1
  • Electron学习笔记,用node程序备份数据库(2)
  • Github 2025-02-07Java开源项目日报 Top9
  • 二叉树实现(学习记录)
  • 神经辐射场(NeRF):从2D图像到3D场景的革命性重建
  • Java面试题——事务
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • windows10环境下的Deepseek本地部署及接口调用
  • 网络安全威胁框架与入侵分析模型概述