P2280 [HNOI2003]激光炸弹

题目描述

 

输入输出格式

输入格式:

 

输入文件名为input.txt

输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi 。

 

输出格式:

 

输出文件名为output.txt

输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。

 

输入输出样例

输入样例#1: 复制
2 1
0 0 1
1 1 1
输出样例#1: 复制
1


二维前缀和板子题
我要说的是一个cin输入问题,此题不能cin>>a>>b>>sum[a+1][b+1]
我也不知道为什么。。。反正wa了我10多次才发现这个问题


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 2147483647
const ll INF = 0x3f3f3f3f3f3f3f3fll;
#define ri register int
template <class T> inline T min(T a, T b, T c)
{
    return min(min(a, b), c);
}
template <class T> inline T max(T a, T b, T c)
{
    return max(max(a, b), c);
}
template <class T> inline T min(T a, T b, T c, T d)
{
    return min(min(a, b), min(c, d));
}
template <class T> inline T max(T a, T b, T c, T d)
{
    return max(max(a, b), max(c, d));
}
#define pi acos(-1)
#define me(x, y) memset(x, y, sizeof(x));
#define For(i, a, b) for (int i = a; i <= b; i++)
#define FFor(i, a, b) for (int i = a; i >= b; i--)
#define mp make_pair
#define pb push_back
const int maxn = 100005;
#define mod 100003
const int N=100005;

// name*******************************
int sum[5055][5055];
int n,x;
int ans=0;
// function******************************
int query(int x1,int y1,int x2,int y2)
{
    return sum[x1][y1]-sum[x2-1][y1]-sum[x1][y2-1]+sum[x2-1][y2-1];
}

//***************************************
int main()
{

//    freopen("outout.txt","r",stdin);
    cin>>n>>x;
    int a,b,vi;

    For(i,1,n)
    {
        cin>>a>>b;
        cin>>sum[a+1][b+1];
    }
    For(i,1,5001)
    {
        For(j,1,5001)
        {
            sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
            if(i-x+1>=1&&j-x+1>=1)
                ans=max(ans,query(i,j,i-x+1,j-x+1));
        }
    }

    cout<<ans;

    return 0;
}

 





posted @ 2018-03-27 19:17  planche  阅读(163)  评论(0编辑  收藏  举报