zoukankan      html  css  js  c++  java
  • 题解 洛谷 P2280 【[HNOI2003]激光炸弹】

    这道题因为要求价值最大值,所以正方形应尽可能多覆盖目标,因此所得的正方形四个顶点一定在格点上。

    经过分析后,我们就可以知道,该题做法就是用二维前缀和进行事前预处理,然后一个一个枚举每个点覆盖到的总价值。

    注意点:

    1.为了防止被xi=0和yi=0的情况坑和方便进行前缀和优化处理,我们可以将每个点的坐标都+1再录入数组。

    2.因为每个目标的价值都为正整数,所以我们可以直接用记录的数组进行前缀和处理,不然会超内存。

    3.进行二维前缀和处理时,可以利用容斥原理算出每个正方形所覆盖的价值。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    int n,r,ans=0,s[5050][5050];
    int main()
    {
    	scanf("%d%d",&n,&r);
    	for(int i=1;i<=n;i++)
    	{
    		int a,b;
    		scanf("%d%d",&a,&b);
    		scanf("%d",&s[a+1][b+1]);
    	}
    	for(int i=1;i<=5005;i++)
    	{
    		for(int j=1;j<=5005;j++)
    		{
    			s[i][j]+=s[i][j-1];
    			s[i][j]+=s[i-1][j];
    			s[i][j]-=s[i-1][j-1];
    		}
    	}
    	for(int i=r;i<=5005;i++)
    	{
    		for(int j=r;j<=5005;j++)
    		ans=max(ans,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);
    	}
    	printf("%d",ans);
    	return 0;
    }
    

    再推荐一道类似的题P2038 无线网络发射器选址(简单许多。。。)

  • 相关阅读:
    flex 只显示年、月的日期选择控件(TimeChooser)
    SQL 实现统计业务
    SQL 时间函数详解
    我与计算机
    ISE中FPGA的实现流程
    总结Verilog中always语句的使用
    VGA 时序标准
    ChipScope软件使用
    FIFO的使用场景
    Verilog 初级入门概念
  • 原文地址:https://www.cnblogs.com/lhm-/p/12229795.html
Copyright © 2011-2022 走看看