Background

王7的生日到了,他的弟弟准备送他巧克力。

Description

有一个被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]块巧克力。就在送出它的前一天晚上,有老鼠夜袭巧克力盒,某些位置上被洗劫并且穿了洞。所以,你——王7的弟弟王9,必须从这个满目苍夷的盒子中切割出一个矩形巧克力盒,其中不能有被老鼠洗劫过的格子且使这个盒子里的巧克力尽量多。

Input

第一行有两个整数 n、m。第 i+1行的第 j 个数表示a[ i , j ]。如果这个数为 0 ,则表示这个位置的格子被洗劫过。

Output

输出最大巧克力数。

表示很水的一个题.要不是数据有问题我就切了

悬线法+二维前缀和。吼啊

不过貌似比只写二维前缀和的麻烦一点.

我们预处理出来悬线法用的数组.(记得变一下限制条件.

然后真正做悬线法的时候.

我们可以得到一个合法矩形.

其左上角坐标,右下角坐标均可求.

然后用二维前缀和算一下即可.

PS:这题数据有问题,读入矩阵的时候要用\(cin\)

代码

#include<cstdio>
#include<algorithm>
#include<iostream>
#define R register
#define N 308
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,m,ans;
int res[N][N],sum[N][N];
int ri[N][N],le[N][N],up[N][N];
inline int calc(int a,int b,int c,int d)
{
return (sum[c][d]-sum[c][b-1]-sum[a-1][d]+sum[a-1][b-1]);
}
int main()
{
in(n),in(m);
for(R int i=1;i<=n;i++)
for(R int j=1;j<=m;j++)
{
cin>>res[i][j];
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+res[i][j];
ri[i][j]=le[i][j]=j;
up[i][j]=1;
}
for(R int i=1;i<=n;i++)
for(R int j=2;j<=m;j++)
if(res[i][j] and res[i][j-1])
le[i][j]=le[i][j-1];
for(R int i=1;i<=n;i++)
for(R int j=m-1;j>=1;j--)
if(res[i][j] and res[i][j+1])
ri[i][j]=ri[i][j+1];
for(R int i=1;i<=n;i++)
for(R int j=1;j<=m;j++)
{
if(res[i][j] and res[i-1][j])
{
le[i][j]=max(le[i][j],le[i-1][j]);
ri[i][j]=min(ri[i][j],ri[i-1][j]);
up[i][j]=up[i-1][j]+1;
}
int a=i-up[i][j]+1,b=le[i][j],c=i,d=ri[i][j];
ans=max(ans,calc(a,b,c,d));
}
printf("%d",ans);
}

DP(悬线法)+二维前缀和【p2706】巧克力的更多相关文章

  1. P1169 [ZJOI2007]棋盘制作[悬线法/二维dp]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...

  2. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  3. BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )

    对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...

  4. P1169 [ZJOI2007]棋盘制作 DP悬线法

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...

  5. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

  6. DP(悬线法)【P1169】 [ZJOI2007]棋盘制作

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...

  7. 【DP悬线法】奶牛浴场

    虽然还是悬线法,但是这道题可不能轻易地套模板了,而是要换一种思路,横着扫一遍,竖着扫一遍,时间复杂度依旧是O(n^2),然而空间复杂度有一定的优化 如果用原来的方法,显然时间空间都会炸(如果你想用ma ...

  8. 算法浅谈之DP悬线法

    悬线法 用途 解决给定矩阵中满足条件的最大子矩阵 做法 用一条线(横竖貌似都行)左右移动直到不满足约束条件或者到达边界 定义 \(left[i][j]\):代表从\((i,j)\)能到达的最左位置 \ ...

  9. [DP专题]悬线法

    参考:https://blog.csdn.net/twtsa/article/details/8120269 先给出题目来源:(洛谷) 1.p1387 最大正方形 2.P1169 棋盘制作 3.p27 ...

随机推荐

  1. Mac Java配置JAVA——HOME

    命令行中输入:  export JAVA_HOME=$(/usr/libexec/java_home) 

  2. [bzoj5285] [HNOI2018]寻宝游戏

    Description 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你,对这个活动非常感兴趣. ...

  3. [BZOJ3829][Poi2014]FarmCraft 贪心

    这个题应该是很容易想到贪心的,只要可是怎么贪才是科学的呢?我们分析一下题干,对于每个边只能一进一出因此,对于树上的一棵子树,我们只要一进子树就必须遍历完,因此我们只能进行一遍 dfs() 然后我们发现 ...

  4. git使用笔记(八)团队协作

    By francis_hao    Nov 24,2016       本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可.欢迎转载,请注明出处 ...

  5. Spring源码解析-配置文件的加载

    spring是一个很有名的java开源框架,作为一名javaer还是有必要了解spring的设计原理和机制,beans.core.context作为spring的三个核心组件.而三个组件中最重要的就是 ...

  6. [模拟赛] GotoAndPlay

    GotoAndPlay 10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生. 玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者... Description 小松鼠终于吃撑了, ...

  7. 获得edittext的图片大小

    1.在布局文件中编写控件,有2张图片 <EditText android:id="@+id/edit" android:background="@drawable/ ...

  8. c++(类继承)示例[仅用于弱弱的博主巩固知识点用哦,不好勿喷]

    测试代码: Animals.h: #pragma once #include<string> class Animals { protected: std::string Food; in ...

  9. 【spoj1811 & spoj1812 - LCS1 & LCS2】sam

    spoj1811  给两个长度小于100000的字符串 A 和 B,求出他们的最长公共连续子串. 先将串 A 构造为 SAM ,然后用 B 按如下规则去跑自动机.用一个变量 lcs 记录当前的最长公共 ...

  10. 好几次的CSS存档

    第一次: #site_nav_under { display: none; } .c_ad_block, .ad_text_commentbox { display: none; margin:; p ...