题目来源:Largest Common Submatrix - 题库 - 计蒜客

题意:有两个大小相同的矩阵,求两个矩阵的最大相同子矩阵,数的范围是1到n*m,没有重复

题解思路:对于每个数,得到这个数在第一个矩阵和第二个矩阵的坐标差,用坐标差形成一个新的矩阵,在这个矩阵中寻找元素相同的最大子矩阵。

代码实现:

#include <iostream>
#include <algorithm>
#include<string>
#include<queue>
#include<map>
#include<cstdio>
#define ll long long
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<stack>
const int md=1e9+7;
using namespace std;
const int maxn=3e6+10;
struct node{int i,j;
};//记录每个点的坐标
int a1,b1;
int l[1020][1020],r[1020][1020],h[1020][1020];//悬线法需要的
node a[1020][1020];//记录新的矩阵
node pos[1000020];//记录第一个矩阵中所有数的位置
int main(){
int n,m,i,j;
ios::sync_with_stdio(false);
cin.tie();
cin>>n>>m;//输入高和长
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{cin>>a1;pos[a1]={i,j};//记录第一个矩阵所有数的位置
}
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{cin>>b1;a[i][j]={pos[b1].i-i,pos[b1].j-j};//用a数组存储每个点在两个矩阵中的坐标差
}
for(i=0;i<n;++i)
for(j=0;j<m;++j)//悬线法初始化
{h[i][j]=1;l[i][j]=r[i][j]=j;
}
for(i=0;i<n;++i)//更新每个点所属于的矩形的左边界和右边界
{for(j=0;j<m;++j){if(a[i][j].i==a[i][j-1].i&&a[i][j].j==a[i][j-1].j)//如果坐标差相同 l[i][j]=l[i][j-1];}for(j=m-2;j>=0;--j)if(a[i][j].i==a[i][j+1].i&&a[i][j].j==a[i][j+1].j)//如果坐标差相同 r[i][j]=r[i][j+1];
}
int max1=0;
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{if(i!=0&&a[i][j].i==a[i-1][j].i&&a[i][j].j==a[i-1][j].j)//坐标差相同 {h[i][j]=h[i-1][j]+1;l[i][j]=max(l[i][j],l[i-1][j]);r[i][j]=min(r[i][j],r[i-1][j]);}max1=max(max1,(r[i][j]-l[i][j]+1)*h[i][j]); //寻找最大值
}
cout<<max1<<'\n';return 0;
}

Largest Common Submatrix相关推荐

  1. 2019ICPC(银川) - Largest Common Submatrix(单调栈)

    题目链接:点击查看 题目大意:给出两个n*m的矩阵,问最大的公共子矩阵的面积是多少 题目分析:一开始看到这个题目是想到了一个n^4的算法..就是暴力枚举,肯定是不行的了,最后的时候还是队友把思路一步步 ...

  2. 2019 ICPC Asia Yinchuan Regional(9 / 13)

    2019 ICPC Asia Yinchuan Regional A - Girls Band Party(分组背包) 每个物品有两个标签,名字,颜色,当名字是设置为奖赏时会对整体加上0.1 的贡献, ...

  3. Maximal submatrix

    杭电多校 Problem Description Given a matrix of n rows and m columns,find the largest area submatrix whic ...

  4. 常见算法:C语言求最小公倍数和最大公约数三种算法

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  5. C语言求最大公约数和最小公倍数的几种算法

    求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b ...

  6. 【今日CV 计算机视觉论文速览 第115期】Fri, 10 May 2019

    今日CS.CV 计算机视觉论文速览 Fri, 10 May 2019 Totally 57 papers ?上期速览✈更多精彩请移步主页 Interesting: ?****手持设备多帧超分辨, 手机 ...

  7. 数据结构基础学习之(串与数组)

    主要知识点学习 串的基本概念及其抽象数据类型描述 串的存储结构 串的基本操作实现 数组的定义.操作和存储结构 矩阵的压缩存储 一. 串 字符串(串): 是由n(n>=0)各字符组成的有限序列 1 ...

  8. iview构建基本html页面,写前端页面步骤----vue+iview

    1:用iview构建基本HTML页面 2:在export default{ }中写一个data(){return:{变量:值}}全局对象,用于传递与绑定HTML参数. 3:在export defaul ...

  9. c语言中最小公倍数算法,常见算法:C语言求最小公倍数和最大公约数三种算法...

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

最新文章

  1. HAproxy指南之haproxy编译安装(安装篇)
  2. 编译器中代码自动对齐快捷键
  3. mac apache 和 nginx ssl 配置自签名的SSL
  4. Master公式(计算递归复杂度)
  5. 关于Android studio run 按钮灰色无法运行的总结
  6. 任意点 曲线距离_中级数学11-曲线函数
  7. java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法
  8. TeleportPoint可瞬移的目标位置
  9. mongodb 集群shard_mongodb集群构建方案(二)
  10. Ubuntu之hadoop非分布式(单机)和伪分布式安装
  11. 《Real-Time Rendering 4th Edition》全文翻译 - 第7章 阴影(下)7.7 ~ 7.10
  12. vivo手机系统android9,可能是最安全的安卓系统了,vivo Funtouch OS 9带来不一样
  13. 零信任的过去、现在和未来
  14. 非常喜欢的一期《晓松奇谈》
  15. 算法题-----题目、题解、个人算法、个人思考
  16. 微观经济学论文选题怎么选?
  17. Spring和SpringBoot简介
  18. Zcash核心:零知识证明
  19. 内毒素检测——内毒素检测-LAL显色试剂盒
  20. 未来电竞旗舰iQOO 8系列今日正式发布 售价3799元起

热门文章

  1. 如何学习 Objective-C 语言,这方面最好的书有什么?
  2. 从整体上理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换...
  3. Python基础讲解(二):chrome开发者工具
  4. kubectl命令管理kubernetes对象的三种方式
  5. Pock 把 Touch Bar 变成系统中的 Dock 栏
  6. power automate desktop在excel中插入新表和行
  7. 这12类Oracle日期函数,全都给你总结了
  8. Airpods序列号怎么看 Airpods查看方法
  9. 记录国外大学精彩的研究内容
  10. java嵌套tlv_TLV----Demo讲解