马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <bits/stdc++.h>
using namespace std;
const int N=5010;
int n,m;
int w[N][N];
int s[N][N]; //可以用前缀和表示原数组,凡是前缀和都从1开始,防止边界问题
int main()
{
int cnt,r;
cin>>cnt>>r;
r=min(5001,r);
n=m=5001;
while(cnt--)
{
int x,y,w;
cin>>x>>y>>w;
x++,y++; //都往右移一位,向下移动一位
// n=max(x,n);
// m=max(y,m);
s[x][y]+=w; //将每个区间的价值进行相加
}
//预处理前缀和
for(int i=1;i<=n;i++)
{
for(int j=1;j<+n;j++)
{
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
}
int res=0;
// 枚举所有边长是r的矩形
for(int i=r;i<=n;i++)
{
for(int j=r;j<=m;j++)
{
res=max(res,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);
}
}
cout<<res<<endl;
}
为什么输出还是0啊 |