您的位置:首页 > 其它

2017.3.17 激光炸弹 思考记录

2017-03-17 20:19 169 查看
二维前缀和,、

但是一上来还是小卡了一下,考虑了一会二分,毕竟n^2不太保险,但好在还是过了,虽然常数比较大、

另外有个小处理:读入时R要--,就可以避免边被选的情况、、其实很简单

(竟然卡两个5000*5000的数组、。、)

码:

#include<iostream>
#include<cstdio>
using namespace std;
#include<cstring>
int sum[5001][5001],line[5001],i,j,n,R,x,y,z,lin,ans;
void calc()
{
for(i=0;i<=5000;i++)
{memset(line,0,sizeof(line));
for(j=0;j<=5000;j++)
{
line[j]+=sum[i][j];
if(j!=0)sum[i][j]+=line[j-1],line[j]+=line[j-1];
if(i!=0)sum[i][j]+=sum[i-1][j];

}
}

}

int main()
{
scanf("%d%d",&n,&R);
R--;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
sum[x][y]=z;
}
calc();

for(i=0;i<=5000-R;i++)
for(j=0;j<=5000-R;j++)
{
lin=sum[i+R][j+R];
if(j!=0)lin-=sum[i+R][j-1];
if(i!=0)lin-=sum[i-1][j+R];
if(j!=0&&i!=0)lin+=sum[i-1][j-1];
ans=max(ans,lin);
}

printf("%d",ans);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: