带限制条件的最大子矩阵 - 牛客
链接:https://www.nowcoder.com/acm/contest/131/B
来源:牛客网
题目描述
请寻找一个子矩阵,使得这个子矩阵的和最大,且满足以下三个条件:
子矩阵的行数不能超过 X 行。
子矩阵的列数不能超过 Y 列。
子矩阵中 0 的个数不能超过 Z 个。
请输出满足以上条件的最大子矩阵和。
输入描述:
第一行输入五个整数 R,C,X,Y,Z。
1 ≤ X ≤ R.1 ≤ Y ≤ C.1 ≤ Z ≤ R x C.-10
9
≤ M
i,j
≤ 10
9
输出描述:
输出满足以上条件的最大子矩阵和。
输入
复制
5 5 3 3 4 0 0 10 0 0 3 4 0 2 3 -1 3 0 -8 3 0 0 32 -9 3 3 0 45 3 0
输出
复制
82
输入
复制
2 2 2 2 2 -1 -1 -1 -1
输出
复制
0 题意 : 在一个大的矩阵中寻找一个小的矩阵,但是行列是有要求的。思路分析: 枚举行的起点和终点,复杂度是 O(n^2) , 通过预处理前缀和,可以得到此时的一行的数,再O(n)的用单调队列搞一下即可代码示例 : (WA 了 , 还在调试中 )
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn = 1e6+5;
typedef pair<ll, ll>pa;ll n, m;
ll x, y, z;
ll mp[505][505], sum[505][505], cnt[505][505], ze[505][505];
ll f[505], f2[505];
pa que[2005];int main() {//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);cin >> n >> m >> x >> y >> z;for(ll i = 1; i <= n; i++){for(ll j = 1; j <= m; j++){scanf("%lld", &mp[i][j]);if (mp[i][j] == 0) ze[i][j] = 1;}} for(ll i = 1; i <= n; i++){for(ll j = 1; j <= m; j++){cnt[i][j] = cnt[i-1][j]+ze[i][j];sum[i][j] = sum[i-1][j]+mp[i][j];}} ll ans = 0;for(ll i = 1; i <= n; i++){for(ll j = i; j <= n; j++){if (j-i+1 > x) break;ll l=0, r = 0 ;memset(que, 0, sizeof(que));memset(f, 0, sizeof(f));memset(f2, 0, sizeof(f2));for(ll k = 1; k <= m; k++){ll num = sum[j][k]-sum[i-1][k];ll zero = cnt[j][k]-cnt[i-1][k];f[k] = f[k-1]+num; f2[k] = f2[k-1]+zero;while (l < r && que[r-1].first > f[k]){r--;}que[r++] = make_pair(f[k], k);while(l < r && k-que[l].second+1 > y) {l++; }while(l < r && f2[k]-f2[que[l].second-1] > z) {l++; }if (l< r) ans = max(ans, f[k]-f[que[l].second-1]);//prllf("%lld %lld %lld %lld l = %lld r = %lld \n", i, j, k, ans, l, r);}}}printf("%lld\n", ans);return 0;
}
转载于:https://www.cnblogs.com/ccut-ry/p/9383955.html
带限制条件的最大子矩阵 - 牛客相关推荐
- 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...
- 刷完牛客网910道Java题目,快速总结上万字,带你扫清Java基础面试障碍
花时间刷完了牛客网专项训练所有的Java题,终于有点时间,决定肝一篇Java基础总结,带你扫清Java基础面试障碍! 文章目录 1.Java关键字 2.向上或向下转型 3.类初始化顺序 4.ASCII ...
- 手把手带你刷好题(牛客刷题⑤)
作者:月亮嚼成星~ 博客主页:月亮嚼成星~的博客主页 专栏:手把手带你刷牛客 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客网 点击免费注册和我一起刷题吧 1.类中的数据域使 ...
- 带权二分图匹配(最小费用最大流) 8.2牛客暑期多校训练营五 E
E.room | 时间限制:1 秒 | 内存限制:256M Nowcoder University has 4n students and n dormitories ( Four students ...
- 【牛客刷题】带你在牛客刷题第一弹(C/C++语言基础题)
目录 第一题 你好,牛客 题目 讲解: AC: 第二题 牛牛学说话之-整数 题目 讲解: AC: 第三题 牛牛学说话之-浮点数 题目 讲解: AC: 第四题 牛牛学加法 题目 讲解: AC: 第五题 ...
- 带 sin, cos 的线段树 - 牛客
链接:https://www.nowcoder.com/acm/contest/160/D 来源:牛客网 题目描述 给出一个长度为n的整数序列a1,a2,...,an,进行m次操作,操作分为两类. 操 ...
- 手把手带你学python—牛客网python 机器学习 信息熵的计算
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 手把手带你学python—牛客网python基础 pandas读取文件查看用户数据集的大小
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 手把手带你学python—牛客网python基础 鸢尾花分类
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
最新文章
- discovery_01
- 可被三整除的最大和—leetcode1262
- windows XP系统下oracle完整卸载过程
- kubernetes集群使用GPU及安装kubeflow1.0.RC操作步骤
- 《大数据》2021年第2期目次摘要
- 数据结构-排序进阶代码
- 使用NBAR更有效的识别与封堵网络应用
- Activity 生命周期及其栈管理方式
- 目录-化工工艺设计手册-换热器
- r语言和python爬虫谁厉害_从事数据科学Python和R语言学哪个好?
- 开源终端上网行为管理服务器编译环境搭建
- ecshop手机号码归属地
- 重置微信内置浏览器字体大小
- android 3d车辆轨迹,极限汽车轨迹3D游戏
- aspose-slides-22.5-jdk16
- CAD关闭图层快捷键,隐藏显示的CAD图层
- c++倒序输出一个四位整数
- HorizontalScrollview+recycleview实现横向滑动
- 牛客练习赛51(C题 勾股定理)
- vite+vue3打包后图片404问题:已解决