博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
带限制条件的最大子矩阵 - 牛客
阅读量:6324 次
发布时间:2019-06-22

本文共 2328 字,大约阅读时间需要 7 分钟。

链接:

来源:牛客网

题目描述

矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 M
i,
j
请寻找一个子矩阵,使得这个子矩阵的和最大,且满足以下三个条件:
子矩阵的行数不能超过 X 行。
子矩阵的列数不能超过 Y 列。
子矩阵中 0 的个数不能超过 Z 个。
请输出满足以上条件的最大子矩阵和。

输入描述:

第一行输入五个整数 R,C,X,Y,Z。
接下来 N 行,每行输入 M 个整数,第 i 行第 j 列的整数表示 M
i,
j
1 ≤ R,C ≤ 500.
1 ≤ X ≤ R. 1 ≤ Y ≤ C. 1 ≤ Z ≤ R x C. -10
≤  M
i,j  
≤ 10
9

输出描述:

输出满足以上条件的最大子矩阵和。
示例1

输入

5 5 3 3 40 0 10 0 03 4 0 2 3-1 3 0 -8 30 0 32 -9 33 0 45 3 0

输出

82
示例2

输入

2 2 2 2 2-1 -1-1 -1

输出

0 题意 : 在一个大的矩阵中寻找一个小的矩阵,但是行列是有要求的。 思路分析: 枚举行的起点和终点,复杂度是 O(n^2) , 通过预处理前缀和,可以得到此时的一行的数,再O(n)的用单调队列搞一下即可 代码示例 : (WA 了 , 还在调试中 )
#include 
using namespace std;#define ll long longconst ll maxn = 1e6+5;typedef pair
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

你可能感兴趣的文章
CSS3中linear-gradient实现百分比进度条
查看>>
Java设计模式精讲
查看>>
数据库索引为什么用B+树实现?
查看>>
Gensim训练维基百科语料库
查看>>
iOS 10.3应用内更换icon
查看>>
全局光照---光子映射
查看>>
支持向量机---线性支持向量机与软间隔最大化
查看>>
puppet自动化管理工具学习之文件
查看>>
Ubuntu安装RPM格式软件包
查看>>
SQL Server中的临时表和表变量 Declare @Tablename Table【转】
查看>>
汇编语言指令英文全称
查看>>
pure-ftpd脚本安装
查看>>
Linux NC 命令
查看>>
ThinkingInJava_6
查看>>
抓取安居客二手房经纪人数据,python爬虫自动翻页
查看>>
Office 2013 正式版--英文版/简体中文版下载(正版验证)
查看>>
iOS程序框架设计之皮肤切换功能 (白天与夜间效果)
查看>>
iptables
查看>>
Project facet Java 6.0 is not supported by target runtime Apache Tomcat v5.5.
查看>>
一个全新的拖拽分页—艺术啊
查看>>