[Offer收割]编程练习赛13 B.最大子矩阵[枚举]
#1502 : 最大子矩阵
描述
给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该子矩阵中所有元素的和不超过K。
输入
第一行包含三个整数N、M和K。
以下N行每行包含M个整数,表示A。
对于40%的数据,1 <= N, M <= 10
对于100%的数据,1 <= N, M <= 250 1 <= K <= 2147483647 1 <= Aij <= 10000
输出
满足条件最大的子矩阵所包含的元素数目。如果没有子矩阵满足条件,输出-1。
- 样例输入
-
3 3 9
1 2 3
2 3 4
3 4 5 - 样例输出
-
4
- 枚举矩形的最上面的行数和最下面的行数(i,j且i<=j);
- 然后一个变量k枚举最右边的列数;
- 一个变量l维护在右边的列为k的情况下做坐标的列的列数;
- 一开始l=1;
- 然后维护这个矩形里面的数字和小于等于k就好;
- 因为只涉及到一个列里面的元素的增删,所以只要在竖列上预处理出前某一列前i行的前缀和就好;
- O(n^3)的复杂度
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,K,ans=-;
int a[N][N];
int s[N][N];
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int main(){
n=read();m=read();K=read();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
a[i][j]=read();
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
s[i][j]=s[i-][j]+a[i][j];
}
}
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++){
int l=,sum=;
for(int k=;k<=m;k++){
sum+=s[j][k]-s[i-][k];
while(l<=k&&sum>K){
sum-=s[j][l]-s[i-][l];
l++;
}
if(l<=k){
ans=max(ans,(j-i+)*(k-l+));
}
}
}
}
printf("%d\n",ans);
return ;
}
[Offer收割]编程练习赛13 B.最大子矩阵[枚举]的更多相关文章
- 【[Offer收割]编程练习赛13 B】最大子矩阵(别人的思路)
[题目链接]:http://hihocoder.com/problemset/problem/1502 [题意] [题解] 枚举矩形的最上面的行数和最下面的行数(i,j且i<=j); 然后一个变 ...
- 【[Offer收割]编程练习赛13 B】最大子矩阵(自己的思路)
[题目链接]:http://hihocoder.com/contest/offers13/problem/2 [题意] [题解] 算出1..250*250这些数字每个数字的所有因子(成对的那种,即x* ...
- [Offer收割]编程练习赛13 解题报告
http://hihocoder.com/contest/offers13/problems 题目1 : 风格不统一如何写程序 首先:输入保证组成变量名的单词只包含小写字母. 做法:只要对不同的部分进 ...
- hihocoder offer收割编程练习赛13 D 骑士游历
思路: 矩阵快速幂. 实现: #include <iostream> #include <cstdio> #include <vector> using names ...
- 【[Offer收割]编程练习赛13 C】 一人麻将
[题目链接]:http://hihocoder.com/problemset/problem/1503 [题意] [题解] 一直在纠结如果没胡的话要扔掉哪一个麻将; 但其实可不用扔的,全部存起来就好了 ...
- 【[Offer收割]编程练习赛13 D】骑士游历(矩阵模板,乘法,加法,乘方)
[题目链接]:http://hihocoder.com/problemset/problem/1504 [题意] [题解] 可以把二维的坐标转成成一维的; 即(x,y)->(x-1)*8+y 然 ...
- 【[Offer收割]编程练习赛13 A】风格不统一如何写程序
[题目链接]:http://hihocoder.com/problemset/problem/1501 [题意] [题解] 模拟题 [Number Of WA] 1 [完整代码] #include & ...
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
随机推荐
- unity3d 获取游戏对象详解
原文地址:http://www.xuanyusong.com/archives/2768 我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能 ...
- 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法
微信公众平台开发时,须要验证消息是否来自微信server,这要用到sha1加密算法.官网上给的是php的sha函数,C++中要用到以下这个函数: 一.引入头文件: #include<openss ...
- APP投资 历史 十万到 十亿元的项目
马云又投了课程表APP 1亿元. 还能输入106字 http://www.tuicool.com/articles/ARVN3qI#0-qzone-1-41007-d020d2d2a4e8d1a3 ...
- tftp
Ubuntu 12.04 tftp 设置 1.sudo apt-get install tftp-hpa tftpd-hpa 2.修改/etc/default/tftpd-hpa TFTP_USERN ...
- flex中的注释
flex 2.5.35论文写到此处,遇到点麻烦,随手翻了本书,说下flex中的注释问题.中文版的35页有点问题,所以纠正下. 下面是p31示例 fb2_2.l /* 读取多个文件 */ %option ...
- vue如何正确销毁当前组件的scroll事件?
将方法写出来,销毁在beforeDestroy写. mounted(){ window.addEventListener("scroll",this.handleFun), }, ...
- 找不到 android-support-v4 解决办法
Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/andro ...
- MyEclipse使用笔记
简单记录下个人常用的一些MyEclipse设置 VS颜色方案 Window-->Preference-->Java->Editor-->Syntax Coloring Clas ...
- crontab修改默认编辑器
crontab默认编辑器为nano 修改crontab默认编辑器为vi或者其他的编辑器 可以用命令select-editor修改 改为3或者4 再用crontab -e 就是vim打开了
- Java正则表达式的使用和详解(下)
1.常用正则表达式 规则 正则表达式语法 一个或多个汉字 ^[\u0391-\uFFE5]+$ 邮政编码 ^[1-9]\d{5}$ QQ号码 ^[1-9]\d{4,10}$ 邮箱 ^[a-zA ...