求助
#include <bits/stdc++.h>using namespace std;
const int N=5010;
int n,m;
int w;
int s; //可以用前缀和表示原数组,凡是前缀和都从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+=w; //将每个区间的价值进行相加
}
//预处理前缀和
for(int i=1;i<=n;i++)
{
for(int j=1;j<+n;j++)
{
s=s+s-s;
}
}
int res=0;
// 枚举所有边长是r的矩形
for(int i=r;i<=n;i++)
{
for(int j=r;j<=m;j++)
{
res=max(res,s-s-s+s);
}
}
cout<<res<<endl;
}
为什么输出还是0啊 问题出在这一行代码上:
for(int j=1;j<+n;j++)
这里应该是j<=m而不是j<+n 。修改后的代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N=5010;
int n,m;
int w;
int s; //可以用前缀和表示原数组,凡是前缀和都从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+=w; //将每个区间的价值进行相加
}
//预处理前缀和
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) // 修改此处
{
s[ i]=s+s[ i]-s;
}
}
int res=0;
// 枚举所有边长是r的矩形
for(int i=r;i<=n;i++)
{
for(int j=r;j<=m;j++)
{
res=max(res,s[ i]-s-s[ i]+s);
}
}
cout<<res<<endl;
}
这样修改后,输出应该是正确的了。
页:
[1]