洛谷 P1169 题解

本文详细介绍了如何解决一个关于在黑白矩阵中选取特定形状(正方形或长方形)的子矩阵的问题,使得相邻点颜色不同。作者通过解析题意、提供数据示例,并给出思路,讲解了使用悬线DP的方法来解决此问题,包括状态定义、转移方程以及代码实现。
摘要由CSDN通过智能技术生成

题意简述

请你在一个黑白矩阵中选出一个长方形(含正方形)和正方形的子矩阵,使得所有相邻的点颜色不一样。
矩阵大小:两条边都 &lt; = 2000 &lt;=2000 <=2000

数据

输入
3 3
1 0 1
0 1 0
1 0 0
输出
4
6

解释

给定矩阵:
blog1.png
正方形:
blog2.png
长方形:
blog3.png
我的控制台是萌萌哒#ffc0cb粉色
一个小技巧:如果您的控制台是像我的这样能选择的,那么只要按着ALT就可以只选出矩形部分了。
效果图:
blog4.png

思路

悬线DP。我们用 L [ i ] [ j ] , R [ i ] [ j ] L[i][j],R[i][j] L[i][j],R[i][j]分别表示向左,右最远珂以延伸(延伸的条件就是黑白相间)到同一行第几个点 U [ i ] [ j ] U[i][j] U[i][j]表示向上延伸(延伸条件同上)的最大长度。(这是悬线DP的套路
然后转移方程很好写。用 m p mp mp记录矩阵,枚举 i , j i,j i,j L , R L,R L,R的初始值是 j j j U U U的初始值是1.若 m p [ i ] [ j − 1 ] ! = m p [ i ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值