题解 P3835 4.沙盘游戏原题

原题:  3835.4.沙盘游戏 FHD_WOLF 于2020-05-20

这应该是2017的压轴题的了吧还是这么水

进入正题

题目写这么长其实就是在一个n*m的矩阵里找最大子矩阵

最大子矩阵嘛
看我直接o(n^6)暴力干他丫的

最朴素的做法是暴力枚举一个矩阵的左上角(a,b),1<=a<=n,1<=b<=m
然后再暴力枚举矩阵的右下角(c,d),1<=c<=n,1<=d<=m 时间复杂度:o(n^6)
然后你可以获得30~40的好成绩

作为一个优秀的OI,你应该会想到用前缀和来优化此题,过于简单,o(n^4)
你可以获得60~80的好成绩

那么100pts的算法是啥呢?
没错,就是最大子段和!

一维的最大子段和很简单把:

 
  
  1. for (int i=1;i<=n;++i) {
  2. s=(s+a[i]>0)?s+a[i]:0;//三目运算符,等价于s+=a[i]; if (s<0) s=0;
  3. ans=max(ans,s);

你可能感兴趣的:(游戏,算法,java)