HYSBZ -1218 激光炸弹
1 #include <iostream> 2 #include <algorithm> 3 #include <cmath> 4 #include <stdio.h> 5 #include <cstring> 6 #include <string> 7 #include <cstdlib> 8 #include <queue> 9 #include <stack> 10 #include <set> 11 #include <vector> 12 #include <map> 13 #include <list> 14 #include <iomanip> 15 #include <fstream> 16 using namespace std; 17 18 int a[5003][5003]; 19 20 int main() 21 { 22 int n,r,x,y,v,nn,mm; 23 24 scanf("%d%d",&n,&r); 25 nn=mm=r; 26 //读入目标价值 27 for(int i=0;i<n;++i) 28 { 29 scanf("%d%d%d",&x,&y,&v); 30 ++x; 31 ++y; 32 a[x][y]+=v; 33 nn=max(nn,x); 34 mm=max(mm,y); 35 } 36 //计算前缀和 37 for(int i=1;i<=nn;++i) 38 { 39 for(int j=1;j<=mm;++j) 40 { 41 a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1]; 42 } 43 } 44 //计算最大前缀和,但是要小于边长r 45 int ans=0,t; 46 for(int i=r;i<=nn;++i) 47 { 48 for(int j=r;j<=mm;++j) 49 { 50 t=a[i][j]-a[i-r][j]-a[i][j-r]+a[i-r][j-r]; 51 ans=max(ans,t); 52 } 53 } 54 printf("%d\n",ans); 55 56 return 0; 57 }