首页 > 其他分享 >AcWing 99. 激光炸弹

AcWing 99. 激光炸弹

时间:2024-03-22 21:32:39浏览次数:27  
标签:arr 前缀 int 复杂度 激光 99 static 方格 AcWing

Problem: AcWing 99. 激光炸弹

文章目录

思路

这是一个二维前缀和的问题。我们需要找到一个r*r的方格,使得这个方格内的所有点的权值和最大。我们可以先计算出每个点的前缀和,然后枚举每个可能的方格,计算出这个方格内的所有点的权值和,取最大值。

解题方法

首先,我们读入所有的点,对于每个点,我们将其权值加到对应的位置上。
然后,我们计算出每个点的前缀和。对于每个点(i, j),其前缀和等于它左边的点的前缀和加上它上面的点的前缀和,再减去它左上角的点的前缀和,再加上它自己的权值。
最后,我们枚举每个可能的方格,计算出这个方格内的所有点的权值和,取最大值。对于每个方格,其内部所有点的权值和等于右下角的点的前缀和减去左下角的点的前缀和,再减去右上角的点的前缀和,再加上左上角的点的前缀和。

复杂度

时间复杂度:

O ( n 2 ) O(n^2) O(n2),我们需要枚举每个可能的方格,每个方格的计算复杂度为 O ( 1 ) O(1) O(1),所以总的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。

空间复杂度:

O ( n 2 ) O(n^2) O(n2),我们需要存储每个点的前缀和,所以空间复杂度为 O ( n 2 ) O(n^2) O(n2)。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static StreamTokenizer sr = new StreamTokenizer(in);
	static int MAXN = 5010;
	static int[][] arr = new int[MAXN][MAXN];
	static int n, r;

	public static void main(String[] args) throws IOException {
		n = nextInt();
		r = nextInt();
		int m = 5001;
		for (int i = 0, x, y, w; i < n; i++) {
			x = nextInt() + 1;
			y = nextInt() + 1;
			w = nextInt();
			arr[x][y] += w;
		}
		// 计算出前缀和
		for (int i = 1; i <= m; i++) {
			for (int j = 1; j <= m; j++) {
				arr[i][j] += arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1];
			}
		}
		// 枚举每个长宽为r的方格总w值
		long ans = 0;
		r = Math.min(r, m);
		for (int a = 1; a <= m - (r - 1); a++) {
			for (int b = 1; b <= m - (r - 1); b++) {
				int c = a + r - 1;
				int d = b + r - 1;
				ans = Math.max(ans, arr[c][d] - arr[a - 1][d] - arr[c][b - 1]
						+ arr[a - 1][b - 1]);
			}
		}
		out.println(ans);
		out.flush();

	}

	private static int nextInt() throws IOException {
		sr.nextToken();
		return (int) sr.nval;
	}

}

标签:arr,前缀,int,复杂度,激光,99,static,方格,AcWing
From: https://blog.csdn.net/m0_73939789/article/details/136603646

相关文章

  • AcWing 3498. 日期差值(每日一题)
    题目链接:3498.日期差值-AcWing题库有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。输入格式输入包含多组测试数据。每组数据占两行,分别表示两个日期,形式为 YYYYMMDD。输出格式每组数据输出一行,即日期差值。数据范围年份范围 [......
  • 蓝桥杯Java ABC组 AcWing P1020 潜水员
    题目链接:https://www.acwing.com/problem/content/1022/#二维背包#Model#Favorite思路好题!可以让你思考各种背包问题中,对体积的定义不同,则初始化就不同本题求的是是至少需要体积VV......
  • AcWing 1230. K倍区间 C++满分题解
    原题链接https://www.acwing.com/problem/content/1232/题目分析求区间和,我们可以通过前缀和来求出。我们规定sum[i]表示第1个元素到第i个元素的和。那么sum[r]-sum[l-1]就是区间[l,r]的和。一维前缀和for(inti=1;i<=n;i++){scanf("%lld",&sum[i]);......
  • 相机与激光雷达是怎么标定的?一览行业所有主流的标定工具
    相机与激光雷达是怎么标定的?一览行业所有主流的标定工具相机与激光雷达的标定是很多任务的基础工作,标定精度决定了下游方案融合的上限,因为许多自动驾驶与机器人公司投入了较大的人力物力不断提升,今天也为大家盘点下常见的Camera-Lidar标定工具箱,建议收藏!加V好友:AutoDriverZone,......
  • 51nod2599 最近公共祖先LCA
    给定一颗n个节点的树,根节点编号为1,有Q组询问,每次给定一对节点编号(x,y),求(x,y)的最近公共祖先。求LCA有多种方法,这里给的是倍增法,预处理时间O(nlogn),单次查询时间O(logn),支持在线。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definerep(i,a,b)for......
  • AcWing 1171. 距离 Tarjan算法离线求LCA
    题目输入样例1:22121001221输出样例1: 100100输入样例2:32121031151232输出样例2: 1025LCA算法:LCA(LeastCommonAncestors)最近公共祖先Tarjan求LCA是一种离线的算法,也就是说它一遍求出所有需要求的点的LCA,而不是需要求哪两个点再去求......
  • Monitor test Philips 279P1B 4K 60FPS 10bit HDR400 99%-Adobe RGB, 99% P3, 99% SRG
    SoIboughtthismonitor.Thespecsarefromhere: https://www.usa.philips.com/c-p/279P1B_27/brilliance-lcd-monitor-with-usb-c ---wordsinshort,DP1.4,HDMI2.0,DP1.4viaUSB-CPD90WmaxWhenenablingUSB-Chigh-resolutionmode(10bit),withmym1......
  • CF999D Equalize the Remainders 题解
    题意给定一个长度为\(n\)的序列和一个模数\(m\),记\(c_i\)表示\(\bmodm\)后的结果为\(i\)的数的个数。现在可以使每个数增加\(1\),请问最少要操作多少次才能使所有\(c_i=\frac{n}{m}\)。并输出最后的序列。First.如何最小化操作次数由于每次操作会使\(c_{a_i\bm......
  • 3.3 RK3399项目开发实录-板载Ubuntu系统的使用(物联技术666)
    嵌入式物联网常用90款传感器开发例程。链接:https://pan.baidu.com/s/1oisHMZXDzKqa4EspY83V-A?pwd=o5f41.介绍Ubuntu使用手册是针对Firefly官方发布的Ubuntu系统固件特性所编写,适用于UbuntuDesktop与Minimal系统,部分与UI显示相关的介绍,只针对Desktop系统。......
  • 3.3 RK3399项目开发实录-板载Ubuntu系统的使用(wulianjishu666)
    嵌入式物联网常用90款传感器开发例程。链接:https://pan.baidu.com/s/1oisHMZXDzKqa4EspY83V-A?pwd=o5f41.介绍Ubuntu使用手册是针对Firefly官方发布的Ubuntu系统固件特性所编写,适用于UbuntuDesktop与Minimal系统,部分与UI显示相关的介绍,只针对Desktop系统。......