zoukankan      html  css  js  c++  java
  • 前缀和(题目)

    EG1 激光炸弹

    在这里插入图片描述

    题意:给你n个点的坐标及权值,用r * r的范围最大覆盖是多少

    在这里插入图片描述

    题解

    //二维的 前缀和 问题
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int n, r;
    int ta, tb;
    int x, y, w;
    int sum[5005][5005];
    int ans = 0;
    int main()
    {
    	cin >> n >> r;					//	r 为 正方形的范围
    	ta = r;
    	tb = r;
    	for (int i = 0; i < n; i++)			//首先利用 for 循环 扫一遍算出每个点的权值
    												// sum[i][j]表示从(1,1)到(i,j)里所含的总值
    	{
    		cin >> x >> y >> w;
    		x++;
    		y++;
    		sum[x][y] += w;
    		ta = max(ta, x);
    		tb = max(tb, y);
    	}
    	for (int i = 1; i <= ta; i++)
    		for (int j = 1; j <= tb; j++)
    			sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    	for (int i = r; i <= ta; i++)
    		for (int j = r; j <= tb; j++)
    			ans = max(ans, sum[i][j] - sum[i - r][j] - sum[i][j - r] + sum[i - r][j - r]); // 相当于求以i,j分开的四个矩形中的右上方的矩形
    	cout << ans << endl;
    	return 0;
    }
    
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    List三个子类的特点
    三种迭代是否可以删除
    Vector
    LinkedList
    ArrayList
    ListIterator
    ConcurrentModificationException并发修改异常
    List
    Collection
    数组转换成集合
  • 原文地址:https://www.cnblogs.com/lightac/p/10534730.html
Copyright © 2011-2022 走看看