题干:

给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该子矩阵中所有元素的和不超过K。

Input

第一行包含三个整数N、M和K。

以下N行每行包含M个整数,表示A。

对于40%的数据,1 <= N, M <= 10

对于100%的数据,1 <= N, M <= 250 1 <= K <= 2147483647 1 <= Aij <= 10000

Output

满足条件最大的子矩阵所包含的元素数目。如果没有子矩阵满足条件,输出-1。

Sample Input

3 3 9
1 2 3
2 3 4
3 4 5

Sample Output

4

解题报告:

先预处理一个前缀和,然后枚举每两行,然后行内尺取就行了,总复杂度N^3,。可以尺取的前提是元素都是正数。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
int n,m,k;
ll a[255][255],sum[255][255];
int main()
{cin>>n>>m>>k;for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {scanf("%lld",&a[i][j]);}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {sum[i][j] = a[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1]; }}int ans = -1;for(int i = 1; i<=n; i++) {for(int j = i; j<=n; j++) {int l = 1,r = 1;ll tmp = 0;while(r <= m) {tmp += sum[j][r] - sum[j][r-1] - sum[i-1][r] + sum[i-1][r-1];while(l<=r && tmp > k) {tmp -= sum[j][l] - sum[j][l-1] - sum[i-1][l] + sum[i-1][l-1];l++;}if(tmp <= k)ans = max(ans,(j-i+1)*(r-l+1)); r++;}}}if(ans <= 0) printf("-1\n");else printf("%d\n",ans);return 0 ;
}

【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取)相关推荐

  1. 【HDU - 1937 】Finding Seats(二维前缀和+尺取法)

    题干: A group of K friends is going to see a movie. However, they are too late to get good tickets, so ...

  2. 海啸(二维前缀和/二维树状数组)

    链接:https://ac.nowcoder.com/acm/problem/21862 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  3. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  4. Gym 102091L Largest Allowed Area 【二分+二维前缀和】

    <题目链接> 题目大意: 给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询 ...

  5. AcWing 99. 激光炸弹 (二维前缀和)

    99. 激光炸弹 题意 给定一个5000x5000的地图 随机在该地图上放置物品,物品具有价值,且不同物品可以放置在同一位置 有一个炸弹的爆炸范围为RxR的正方形 问该炸弹在地图上爆炸一次,最多能摧毁 ...

  6. 模版 ----- 一维前缀和与二维前缀和

    一维前缀和 795. 前缀和 a[i] 的前 i 项和 s[i] 的递推公式:s[i]=s[i−1]+a[i]s[i] = s[i - 1] + a[i]s[i]=s[i−1]+a[i] 求出在 [l ...

  7. 一维前缀和,二维前缀和,一维差分,二维差分(翻译)

    练习一道题目 输入一个长度为n的整数序列. 接下来再输入m个询问,每个询问输入一对l, r. 对于每个询问,输出原序列中从第l个数到第r个数的和. 输入格式 第一行包含两个整数n和m. 第二行包含n个 ...

  8. 激光导弹Gundam Unicorn(二维前缀和and二维差分)

    激光炸弹和Gundam Unicorn是二维前缀和和二位差分的综合应用. 首先是一二维差分,前缀和的模板前缀和与差分 图文并茂 超级详细整理(全网最通俗易懂)_林深不见鹿 的博客-CSDN博客_前缀和 ...

  9. 【二维前缀和】304. 二维区域和检索 - 矩阵不可变

    目录 题目 前缀和解法(二维) 二维vector 定义 这道题是「303. 区域和检索 - 数组不可变」的进阶,第 303 题是在一维数组中做区域和检索,这道题是在二维矩阵中做区域和检索. 题目 30 ...

  10. [蓝桥杯 2018 国 B] 搭积木 (区间dp + 二维前缀和优化)

    原题链接(洛谷) 题目描述 小明对搭积木非常感兴趣.他的积木都是同样大小的正立方体. 在搭积木时,小明选取 m m m 块积木作为地基,将他们在桌子上一字排开,中间不留空隙,并称其为第 0 0 0 层 ...

最新文章

  1. etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现
  2. 在ASP.NET中UrlRewrite的实现(能隐藏扩展名)之一
  3. 强制转换const 引用
  4. 使用代码获得Hybris Commerce里显示的产品图片
  5. oracle滚动统计,sql – 按月滚动或运行Oracle总计
  6. PHP求100-1000之间的水仙花数
  7. 残差自回归模型的R实现
  8. oracle sql列转行_Oracle行转列、列转行的Sql语句总结(转)
  9. Spring系列8:bean的作用域
  10. 华为交换机常见VLAN操作
  11. 文件服务器和ftp服务器的区别
  12. 深富策略鸿蒙概念股继续领跌
  13. win中q-dir,everything,Windows Tabs,Clover各种效率神器(搜索,资源管理器,多标签)
  14. linux7 清屏,CentOS 清屏命令clear的讲解
  15. 代码审计--13--源代码审计思路(下)
  16. 单片机原理及应用之AT89S52
  17. 高效团队都在用的目标管理工具——飞项
  18. NX二次开发-UFUN工程图导入视图UF_DRAW_import_view
  19. 哔哩哔哩怎么调节屏幕亮度
  20. day06 记账程序01

热门文章

  1. oracle.cmd
  2. android学习笔记:数据库存储
  3. 673. Number of Longest Increasing Subsequence
  4. [Leedcode][JAVA][第200题][岛屿数量][DFS][BFS][并查集]
  5. eclipse maven项目 class类部署不到tomcat下_Servlet tomcat部署
  6. python列表统计每个元素出现次数_python 统计list中各个元素出现的次数的几种方法...
  7. 手工机器人的做法大全用易拉罐_纯手工自制黄油,做法简单详细易操作,蛋糕、饼干、面包都能用...
  8. delphi 中如果不进行 closehandle 会怎么样_心理学:当你迷茫了,请坚持做三件事,你的未来会越来越好...
  9. ubuntu安装python_ubuntu18.04下源码编译安装最新版本Python3
  10. java如何添加进程_如何创建一个进程,如何进程调用进程