bzoj1218 激光炸弹
bz上难得一见的水题啊。
我们发现:这个SB居然只要枚举就行了!!!
我TM......
1 /************************************************************** 2 Problem: 1218 3 Language: C++ 4 Result: Accepted 5 Time:1472 ms 6 Memory:147892 kb 7 ****************************************************************/ 8 9 #include <cstdio> 10 #include <algorithm> 11 using namespace std; 12 const int N = 5010; 13 14 int sum[N][N],r; 15 short a[N][N]; 16 /* 17 int getsum(int i,int j) { 18 return sum[i+r][j+r]+sum[i-1][j-1]-sum[i+r][j-1]-sum[i-1][j+r]; 19 } 20 */ 21 int main(){ 22 int n,x,y,v,mx,my; 23 scanf("%d%d",&n,&r); 24 r--; 25 mx=my=r; 26 for(int i=1;i<=n;i++) { 27 scanf("%d%d%d",&x,&y,&v); 28 x++;y++; 29 a[x][y]+=v; 30 mx=max(mx,x); 31 my=max(my,y); 32 } 33 mx++;my++; 34 for(int i=1;i<=mx;i++){ 35 for(int j=1;j<=my;j++) { 36 sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]; 37 } 38 } 39 int ans=-1; 40 for(int i=1;i+r<=mx;i++) { 41 for(int j=1;j+r<=my;j++) { 42 ans=max(ans,sum[i+r][j+r]+sum[i-1][j-1]-sum[i+r][j-1]-sum[i-1][j+r]); 43 } 44 } 45 printf("%d",ans); 46 return 0; 47 }