1 for(int i=2;i<=4999;i++){//这里从2开始是防止数组越界 2 map[1][i]+=map[1][i-1]; 3 map[i][1]+=map[i-1][1]; 4 }
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 #include <cstdlib> 6 #include <ctime> 7 using namespace std; 8 int map[5100][5100]={0}; 9 int n,r,maxa=0,maxb=0,maxnum=0; 10 inline int Read()//快读 虽然这个题貌似没有必要 11 { 12 int r = 0; 13 char c = getchar(); 14 while (!isdigit(c)) c = getchar(); 15 while (isdigit(c)) {r = r * 10 + c - ‘0‘; c = getchar();} 16 return r; 17 } 18 int main() 19 { 20 n=Read();r=Read(); 21 for(int i=0;i<=n-1;i++) 22 { 23 int a,b; 24 a=Read();b=Read(); 25 map[a+1][b+1]=Read(); 26 if(a>maxa) maxa=a; 27 if(b>maxb) maxb=b; //记录max是为了省时间 28 } 29 for(int i=2;i<=4999;i++){ 30 map[1][i]+=map[1][i-1]; 31 map[i][1]+=map[i-1][1];//初始化边界 32 } 33 for(int i=2;i<=maxa+100;i++) 34 for(int p=2;p<=maxb+100;p++) 35 { 36 map[i][p]=map[i][p]+map[i-1][p]+map[i][p-1]-map[i-1][p-1];//计算 37 } 38 for(int i=r;i<=maxa+100;i++) 39 for(int p=r;p<=maxb+100;p++) 40 { 41 int num=map[i][p]-map[i-r][p]-map[i][p-r]+map[i-r][p-r]; 42 if(num>maxnum) maxnum=num;//更新最大值 43 } 44 printf("%d",maxnum); 45 return 0; 46 }
原文:https://www.cnblogs.com/taotianzhufang/p/14359025.html