• 题目链接:

    https://www.luogu.org/problemnew/show/P2280

  • 思路:

    简单的二维前缀和,最后扫描一遍求

    max(ans,f[i][j]+f[i-r][j-r]-f[i-r][j]-f[i][j-r]);

    两个操作时间复杂度都是N方

  • 注意细节:

    • mx,my初始值赋值为边长,否则会有一个点WA
    • x,y因为从0开始,都加1方便处理
    • 第二遍扫描时,从r开始扫描
    • 因为v值较小,可以用short,不过我很好奇为什么不能用char
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
const int maxn=5005;
int n,r;
short int map[5005][5005];
int f[5005][5005],mx=0,my=0;
template <class T>void read(T & x)
{
int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return;
}
int main()
{
int x,y,v,ans=0;
read(n),read(r);mx=r,my=r;
for(register int i=1;i<=n;i++)
{
read(x),read(y),read(v);
x++,y++;
map[x][y]=v;
mx=max(mx,x),my=max(my,y);
}
for(register int i=1;i<=mx;i++)
for(register int j=1;j<=my;j++)
f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+map[i][j];
for(register int i=r;i<=mx;i++)
for(register int j=r;j<=my;j++)
ans=max(ans,f[i][j]+f[i-r][j-r]-f[i-r][j]-f[i][j-r]);
printf("%d\n",ans);
return 0;
}

最新文章

  1. some tips learn from work experience
  2. hibernate日常BUG总结
  3. mfc_随机数生成器
  4. [cocos2d] 调用动画方法
  5. LINUX下中文语言包的安装(转)
  6. 总结NHibernate 中删除数据的几种方法
  7. 微信公众平台消息接口PHP版开发教程
  8. ios打包 上架 了解
  9. Jenkins+PowerShell持续集成环境搭建(四)常用PowerShell命令
  10. bootstrap学习总结
  11. javascript(作业九)
  12. PCB (5) 创建自己的原件库
  13. T550 HiDPI Ubuntu 16.04安装流水帐
  14. python标准库介绍——31 threading 模块详解
  15. Spark orderBy(desc(&quot;col&quot;))部分数据排序失败
  16. Flask从入门到精通之链接的使用
  17. Ajax-ajax实例4-多级联动菜单
  18. hihoCoder_1445_后缀自动机二&#183;重复旋律5
  19. java学习5-jar包的下载以及导入
  20. bzoj2213: [Poi2011]Difference(思维题)

热门文章

  1. Qt 字符串QString arg()用法总结
  2. APScheduler 3.0.1浅析
  3. Turbine Netflix
  4. PHP yii2.0框架利用mpdf导出pdf
  5. Delphi7-TClientDataSet: 查找
  6. docker启动cavisor监控
  7. Golang gRPC微服务02: helloworld
  8. 状态管理之 Flux、Redux、Vuex、MobX(概念篇)
  9. python-Web-django-商城-购物车商品加减
  10. 在openstack中安装mysql5.7