题目:https://www.luogu.org/problemnew/show/P2038#sub
注意:
1,赋初始值!
2,附初始值!!
3,附初始值!!!
暴力代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int a[200][200];
int main()
{
int i,d,n,x,y,k1,j,k,l;
long long sum,ans1=0,ans2;
freopen("a.txt","r",stdin);
scanf("%d",&d);
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d%d%d",&x,&y,&k1);
a[x][y]=k1;
}
for (i=0;i<=128;i++)
{
for (j=0;j<=128;j++)
{
sum=0;
for (k=max(i-d,0);k<=min(i+d,128);k++)
{
for (l=max(j-d,0);l<=min(j+d,128);l++)
{
sum+=a[k][l];
}
}
if (sum>ans1)
{
ans1=sum;
ans2=1;
}
else if (sum==ans1)
ans2++;
}
}
printf("%lld %lld\n",ans2,ans1);
return 0;
}
前缀和算法莫名爆零
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int a[200][200];
long long sum[200][200];
int main()
{
int i,d,n,x,y,k,j,i1,i2,j1,j2;
long long sum1,ans1=0,ans2=0,ans;
freopen("a.txt","r",stdin);
scanf("%d%d",&d,&n);
memset(a,0,sizeof(a));
for (i=0;i<n;i++)
{
scanf("%d%d%d",&x,&y,&k);
a[x+1][y+1]=k;
}
memset(sum,0,sizeof(sum));
for (i=1;i<=129;i++)
{
sum1=0;
for (j=1;j<=129;j++)
{
sum1+=a[i][j];
sum[i][j]=sum[i-1][j]+sum1;
}
}
for (i=1;i<=129;i++)
{
for (j=1;j<=129;j++)
{
i1=max(i-d-1,0); i2=min(i+d,129);
j1=max(j-d-1,0); j2=min(i+d,129);
ans=sum[i2][j2]-sum[i2][j1]-sum[i1][j2]+sum[i1][j1];
if (ans>ans1)
{
ans1=ans;
ans2=1;
}
else if (ans==ans1)
ans2++;
}
}
printf("%lld %lld\n",ans2,ans1);
return 0;
}
错误:j2=min(j+d,129)