|
发表于 2023-11-8 21:12:38
|
显示全部楼层
问题出在这一行代码上:
这里应该是 j<=m 而不是 j<+n 。修改后的代码如下:
- #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<=m;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;
- }
复制代码
这样修改后,输出应该是正确的了。 |
|