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; }