Snowy Smile

Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 147 Accepted Submission(s): 48

Problem Description

There are n pirate chests buried in Byteland, labeled by 1,2,…,n.1,2,…,n.1,2,…,n. The iii-th chest’s location is (xi,yi)(x_i,y_i)(xi​,yi​), and its value is wi,wiw_i, w_iwi​,wi​ can be negative since the pirate can add some poisonous gases into the chest. When you open the iii-th pirate chest, you will get wiw_iwi​ value.

You want to make money from these pirate chests. You can select a rectangle, the sides of which are all paralleled to the axes, and then all the chests inside it or on its border will be opened. Note that you must open all the chests within that range regardless of their values are positive or negative. But you can choose a rectangle with nothing in it to get a zero sum.

Please write a program to find the best rectangle with maximum total value.

Input

The first line of the input contains an integer T(1≤T≤100)T(1\leq T\leq 100)T(1≤T≤100), denoting the number of test cases.

In each test case, there is one integer n(1≤n≤2000)n(1\leq n\leq 2000)n(1≤n≤2000) in the first line, denoting the number of pirate chests.

For the next n lines, each line contains three integers xi,yi,wi(−109≤xi,yi,wi≤109)x_i,y_i,w_i(−10^9\leq x_i,y_i,w_i\leq 10^9)xi​,yi​,wi​(−109≤xi​,yi​,wi​≤109), denoting each pirate chest.

It is guaranteed that ∑n≤10000\sum n\leq 10000∑n≤10000.

Output

For each test case, print a single line containing an integer, denoting the maximum total value.

Sample Input

2
4
1 1 50
2 1 50
1 2 50
2 2 -500
2
-1 1 5
-1 1 1

Sample Output

100
6

Source

2019 Multi-University Training Contest 6

题意

  • 就是有一个矩阵,这个矩阵中只有200020002000个点有值,其他位置值为0,让你求最大子矩阵和【矩阵大小可以为0】

题解

  • 其实之前牛客多校也出过一个类似的题,处理方法都很套路,就是枚举宽度然后要很快的找最长的那个矩阵,记得上次牛客是枚举宽度+单调队列处理,而这题,对于宽度为[l,r+1][l,r+1][l,r+1]的矩形,其实它的信息可以在宽度为[l,r][l,r][l,r]的子矩形的基础上多加上第r+1r+1r+1行的信息,这个信息就是每一列的和,然后怎么快速知道最大子矩阵呢?还记得线段树入门题目最大子矩阵和吗?只用线段树维护最大前缀,后缀,区间最值,区间和就行了,pushuppushuppushup操作很简单可以参考代码
  • 签到速度不够,题目刷的太少,学过的东西不知道用!!!
#include<bits/stdc++.h>using namespace std;
const int maxn=2005;
#define inf 0x3f3f3f3f3f3f3f3f
struct node{long long pre,suf,sum,maxx;node(long long a=0,long long b=0,long long c=0,long long d=0) {pre=a;suf=b;sum=c;maxx=d;}
}tree[maxn<<2];struct point{int x,y;long long val;point(int a=0,int b=0) {x=a;y=b;}
}p[maxn];void pushup(int id)
{tree[id].pre=max(tree[id<<1].pre,tree[id<<1].sum+tree[id<<1|1].pre);tree[id].suf=max(tree[id<<1|1].suf,tree[id<<1|1].sum+tree[id<<1].suf);tree[id].maxx=max(tree[id<<1].maxx,max(tree[id<<1|1].maxx,tree[id<<1].suf+tree[id<<1|1].pre));tree[id].sum=(tree[id<<1].sum+tree[id<<1|1].sum);
}void build(int id,int l,int r)
{tree[id]=node(0,0,0,0);if(l==r) return;int mid=(l+r)>>1;build(id<<1,l,mid);build(id<<1|1,mid+1,r);
}void update(int id,int L,int R,int pos,long long val)
{if(L==R) {tree[id].sum+=val;tree[id].pre+=val;tree[id].suf+=val;tree[id].maxx+=val;return;}int mid=(L+R)>>1;if(pos<=mid) {update(id<<1,L,mid,pos,val);}else {update(id<<1|1,mid+1,R,pos,val);}pushup(id);
}int n,c[maxn],d[maxn];
vector<point> vec[maxn];int main()
{int t;scanf("%d",&t);while(t--) {scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%d %d %lld",&p[i].x,&p[i].y,&p[i].val);c[i]=p[i].x;d[i]=p[i].y;}sort(c+1,c+n+1);sort(d+1,d+n+1);int tot1=unique(c+1,c+n+1)-c-1,tot2=unique(d+1,d+n+1)-d-1;for(int i=1;i<=n;i++) {p[i].x=lower_bound(c+1,c+tot1+1,p[i].x)-c;p[i].y=lower_bound(d+1,d+tot2+1,p[i].y)-d;vec[p[i].x].push_back(p[i]);}long long ans=0;for(int i=1;i<=tot1;i++) {build(1,1,tot2);for(int j=i;j<=tot1;j++) {for(auto p1:vec[j]) {update(1,1,tot2,p1.y,p1.val);}ans=max(ans,tree[1].maxx);}}printf("%lld\n",ans);for(int i=1;i<=tot1;i++) vec[i].clear();}
}

「hdu6638」Snowy Smile【稀疏矩阵最大子矩阵和】相关推荐

  1. 「ZJOI2009」多米诺骨牌

    「ZJOI2009」多米诺骨牌 题目描述 有一个n × m 的矩形表格,其中有一些位置有障碍.现在要在这个表格内 放一些1 × 2 或者2 × 1 的多米诺骨牌,使得任何两个多米诺骨牌没有重叠部分,任 ...

  2. 如何实现高速卷积?深度学习库使用了这些「黑魔法」

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:公众号 机器之心 授权转载 使用深度学习库可以大幅加速CNN ...

  3. 「紫禁之巅」四大图神经网络架构

    近年来,人们对深度学习方法在图数据上的扩展越来越感兴趣.在深度学习的成功推动下,研究人员借鉴了卷积网络.循环网络和深度自动编码器的思想,定义和设计了用于处理图数据的神经网络结构.图神经网络的火热使得各 ...

  4. 编程思想 之「字符串」

    温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,欢迎感兴趣的童鞋Star.Fork,纠错. 字符串 字符串(String)对象是不可变的,把String对 ...

  5. 如何直观地理解「协方差矩阵」?

    如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...

  6. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  7. 不带头节点的链表有哪些缺点_23张图!万字详解「链表」,从小白到大佬!

    链表和数组是数据类型中两个重要又常用的基础数据类型. 数组是连续存储在内存中的数据结构,因此它的优势是可以通过下标迅速的找到元素的位置,而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动,为了解 ...

  8. 一位老码农的分享:一线程序员该如何面对「中年危机」?

    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~   本文长度为2728字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 先来聊一下这个问题的背景吧. 前两天有小伙伴问 ...

  9. 机器人 Ameca「苏醒」瞬间逼真到令人恐惧,网友纷纷惊叹……

    整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,国内外网友都被一段机器人「苏醒」的视频惊讶到. 视频开始时,机器人似乎已经睡着,眼睛闭着,头部略微向下倾斜.随着肩膀的伸展 ...

  10. AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……

    整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 今年 7 月,一名33岁的美国小哥 Joshua Barbeau 在未婚妻去世后,根据她在 Facebook 和 twitter ...

最新文章

  1. 履带机器人运动控制器c++_敏捷得像猫,被抛出后能平稳着地,有意思的美国西点军校机器人!...
  2. 开源中国 Chrome 插件,你的好帮手~
  3. 重根迭代法解方程(两种方法)(Python实现)
  4. maven项目的一键构建
  5. Cocos2d-x跨AndroidiOS平台开发入门
  6. 依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的5个数,且该数是奇数,则把这个四位数按从小到大的顺序存入数组b中,并计算满足上述条件的四位数的个数cnt。
  7. Ubuntu16.04 ORB_SLAM2的安装教程
  8. OpenGL 坐标变换(1)
  9. 概率论与数理统计(陈希孺)笔记2.2
  10. C语言 汇总笔记(小甲鱼:带你学C带你飞)
  11. 使用IDM的正确姿势
  12. MVC+easyui-datagrid之查看详情
  13. matlab 贝叶斯网络工具箱的安装
  14. 语言设置修复计算机 没有光盘,如何在Windows中创建系统修复光盘
  15. 2018百度之星资格赛- 1006 三原色
  16. 利用贴图实现的人脸特效
  17. Eric S. Raymond:如何成为一名黑客
  18. 关于vue组织机构导图插件(vue-org-tree)的使用总结
  19. golang与手机如何实现一些自动化操作?
  20. selenium跳过登录

热门文章

  1. java三维动画_基于Java3D的交互式三维动画的研究
  2. java LPT1_com1/lpt1/prn/nul 木马后门处理方法集合
  3. 如何把路由器设置为交换机模式来使用
  4. 程序员如何才能写出一篇好的技术文章
  5. 英语学习口诀大全be 的用法口诀
  6. 古画会唱歌/图片说话对口型视频教程+工具素材
  7. 这个神器让我的 Bug 少了一半
  8. python飞机大战概要设计_飞机大战展示.ppt
  9. ElasticSearch 7 中keyword和integer、long、short存储性能对比实验
  10. Putty 设置前景色和背景色