【演算法競賽進階指南】字首和BZOJ1218鐳射炸彈
阿新 • • 發佈:2018-12-02
題目是二維字首和,N^2完成維護
S[i,j]=S[i-1,j]+S[i,j-1]+A[i,j],簡化操作資料直接輸入S中
題目中要注意目標的座標,往往被包含在x+1,y+1之中
#include<cstdio> #include<algorithm> using namespace std; int f[5005][5005]; int main(){ int n,R; scanf("%d%d",&n,&R); int maxx=R,maxy=R; while(n--){ int x,y,v; scanf("%d%d%d",&x,&y,&v); x++;y++;//注意 f[x][y]+=v; maxx=max(maxx,x); maxy=max(maxy,y); } for(int i=1;i<=maxx;i++){ for(int j=1;j<=maxy;j++){ f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1]; } } int maxans=0; for(int i=R;i<=maxx;i++){ for(int j=R;j<=maxy;j++){ maxans=max(maxans,f[i][j]-f[i-R][j]-f[i][j-R]+f[i-R][j-R]); } } printf("%d",maxans); return 0; }