ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Blue Mary的战役地图

2020-07-30 12:00:35  阅读:228  来源: 互联网

标签:Blue x1 地图 矩阵 x2 y2 Mary dp


Blue Mary的战役地图( hash\(\star\star \))

  • 时限:\(1s\) 内存:\(256M\)

Descrption

  • \(Blue Mary\) 最近迷上了玩 \(Starcraft\) (星际争霸) 的 \(RPG\) 游戏。她正在设法寻找更多的战役地图以进一步提高自己的水平。
  • 由于 \(Blue Mary\) 的技术已经达到了一定的高度,因此,对于用同一种打法能够通过的战役地图,她只需要玩一张,她就能了解这一类战役的打法,然后她就没有兴趣再玩儿这一类地图了。而网上流传的地图有很多都是属于同一种打法,因此 \(Blue Mary\) 需要你写一个程序,来帮助她判断哪些地图是属于同一类的。
  • 具体来说,\(Blue Mary\) 已经将战役地图编码为 \(n\times n\) 的矩阵,矩阵的每个格子里面是一个 \(32\) 位(有符号)正整数。对于两个矩阵,他们的相似程度定义为他们的最大公共正方形矩阵的边长。两个矩阵的相似程度越大,这两张战役地图就越有可能是属于同一类的。

Input

  • 输入文件的第一行包含一个正整数 \(n\) 。
  • 以下 \(n\) 行,每行包含 \(n\) 个正整数,表示第一张战役地图的代表矩阵。
  • 再以下 \(n\) 行,每行包含 \(n\) 个正整数,表示第二张战役地图的代表矩阵。

Output

  • 输出文件仅包含一行。这一行仅有一个正整数,表示这两个矩阵的相似程度。

Sample Input

3
1 2 3
4 5 6
7 8 9
5 6 7
8 9 1
2 3 4

Sample Output

2

Hint

  • 子矩阵:

    5 6

    8 9

    为两个地图的最大公共矩阵

  • 对于\(30\%\) 的数据 \(1<=n<=50\) 。

  • 对于 \(60\%\) 的数据 \(1<=n<=200\)。

  • 对于 \(100\%\) 的数据 \(1<=n<=500\) 。

  • 来源:\(luogup4398\)

分析

  • 方法一:\(dp\)
    • 此题很像线性 \(dp\) 的求最长公共子串。但不同的是此题是二维矩阵,我们可以参照最长公共子串的模型定义出状态:\(dp[x1][y1][x2][y2]\) 表示第一个矩阵的右下角坐标为 \((x1,y1)\) ,第二个矩阵的右下角坐标为 \((x2,y2)\) 公共正方形最大的边长。则有状态转移方程:
    • \(dp[x1][y1][x2][y2]=min(dp[x1-1][y1-1][x2-1][y2-1],min(dp[x1][y-1][x2][y2-1],dp[x1-1][y1][x2-1][y2]))\)
    • 即 \((x1,y1),(x2,y2)\) 为右下角的最大公共子矩阵要看以当前点的左边,正上,左上为右下角的三个公共矩阵中最小的再加上 \(1\),这个 \(1\) 就是当前点坐在的行和列。
    • 这是这类题的典型做法,但实在对不起,\(n\le 100\) ,\(n^4\) 有点悬,不过本服务器还是能压过。
  • 方法二:二维hash

标签:Blue,x1,地图,矩阵,x2,y2,Mary,dp
来源: https://www.cnblogs.com/hbhszxyb/p/13402986.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有