lsmCC 发表于 2023-11-8 21:11:59

求助

#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啊

isdkz 发表于 2023-11-8 21:12:38

问题出在这一行代码上:

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]
查看完整版本: 求助