思路清奇,代码简洁的好题

问题大体分两部:

  • 记录子矩阵个数,统计每一个点作为右下角时可以得到多少矩形,加起来就是答案
  • 剪掉墙挡住的地方

考虑从右下角开始,如果有0已经挡住了矩阵,那么更靠左、上的0都卵用没有->单调栈

#include<bits/stdc++.h>
using namespace std;
int n,m,a[3005][3005];
int up[3005],s[3005],top;
long long sum[3005],ans=0;
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}for(int i=1;i<=n;i++){top=0;//维护最近的0 for(int j=1;j<=m;j++){if(!a[i][j]) up[j]=i;//墙 while(top&&up[s[top]]<up[j]) top--; //远的0不要 s[++top]=j;//高度 sum[top]=sum[top-1]+(i-up[s[top]])*(s[top]-s[top-1]);//左边的答案继承+新形成的矩形方案(新的最大矩形长 ×宽)ans+=sum[top];}}printf("%lld",ans);return 0;
}

P3400【仓鼠窝 】相关推荐

  1. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝

    爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...

  2. 洛谷P3400 仓鼠窝(单调栈)

    P3400 仓鼠窝 题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子 ...

  3. 洛谷 P3400 仓鼠窝

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  4. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  5. [LUOGU]P3400 仓鼠窝

    传送门 首先分析问题,我们要求出所有的子矩形,不妨考虑以每一点为右下角的子矩形的个数,加起来正好就是总的子矩形数了. 然后考虑每一个点为左下角时的方案数,我们考虑每在它左上的点是否可以作为矩形的左上角 ...

  6. P3400 仓鼠窝 (单调栈 dp

    添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e3+9; l ...

  7. P3400 仓鼠窝 (单调栈 dp O(n*m

    添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e3+9; l ...

  8. 【洛谷P3400】仓鼠窝

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  9. 【洛咕P3400】仓鼠窝【单调栈】

    死灵复活时间ouo 闲的没事儿才写博客的死鸽子 这道题为P5300埋下了很好的伏笔qwq解法是差不多的. 一个矩阵里面的子矩阵有多少个很好求 如果加上了一些限制,我们就要重新考虑. 第一个逻辑是把大问 ...

最新文章

  1. c++中ifstream一次读取整个文件
  2. i7跑服务器系统,i7主机做服务器
  3. vue计算属性:computed示例
  4. python用pandas提取行列_python- pandas 不删除符合条件的行和列
  5. 将Spring集成到旧版应用程序中
  6. 《程序员代码面试指南》第二章 链表问题 反转部分单向链表
  7. 安卓应用安全指南 4.2.2 创建/使用广播接收器 规则书
  8. 中西造园水法浅比【ZZ】
  9. linux终端快捷方式
  10. linux编码合适修改_CentOS升级Linux内核备忘录
  11. 漫画:如何实现大整数相乘?
  12. 电子商务网站建设规划方案
  13. java毕业设计万科集团社区管理系统mybatis+源码+调试部署+系统+数据库+lw
  14. 关于STM32单片机延时微妙(delay_us)函数-hal库
  15. WebGL之3D地球
  16. lvm扩容lv扩容操作记录
  17. HTML5期末大作业:商城网站设计——仿天猫商城(9页) HTML+CSS大作业_ 网页制作作业_疫情防控网页设计...
  18. Android Studio掷骰子生成随机数(Java)
  19. PCB板HDI板几阶是什么意思
  20. 计算机学院的师弟师妹们,请不要去餐馆打工了

热门文章

  1. MySQL中order by 结果不准确的问题及解决
  2. 爬虫----js逆向某宝h5的sign参数
  3. 操作系统精髓与原理--复习题答案整理
  4. 图像识别——(java)opencv(处理图像各种算法测试)
  5. 安卓系统开发下载和安装JRE
  6. matlab 去NaN
  7. 2019电商生意经(五):明确中台化的概念、形式与战略
  8. unity ugui改变width,height,pos
  9. 【CentOS7安装Redis及常用命令】
  10. 重押农业,拼多多正在扛起乡村振兴大旗