HDU 6052 思维+单调栈

博客介绍了如何利用单调栈解决HDU 6052题目的算法,该题目要求计算给定矩阵中子矩阵不同颜色数量的期望。通过从上到下、从左到右枚举矩阵中的每个点,避免重复计算,并找到包含特定点的子矩阵在各个方向上的最大拓展范围。博主详细解释了如何维护两个单调栈来确定子矩阵的左右边界,以及如何计算每个点的贡献,最终得出期望值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://acm.hdu.edu.cn/showproblem.php?pid=6052

题意:给一个n*m(1<=n,m<=100)的矩阵,每个矩阵元素有一个颜色值ai(0<=ai<=10000),现在定义一个子矩阵的value为子矩阵中不同颜色的数量,求子矩阵value的期望。

题解:

做这个题首先是因为南京网络赛的B题,然后这就是传说中相近的原题之一。。好吧,是多校题,什么感受不用我说了吧QAQ。

在做了一个暑假的多校之后,算贡献三个字已经常常挂在我嘴边,虽然时常不知道怎么算。但是显然,这种题不可能去枚举子矩阵的,所以既然每个点都有颜色,那肯定要想如何不重复、有效得计算某个点能出现的子矩阵个数的贡献。这样算出的结果除以n*(n+1)*m*(m+1)/4(一共有这么多种子矩阵的选法)后就是期望了。

这里先扔个链接https://blog.youkuaiyun.com/u014258433/article/details/76223343

orz葫芦爷https://blog.youkuaiyun.com/calabash_boy/article/details/76272704

一开始我一心想着单调栈于是发现这是最原始的一篇,结合着别的参考了他的代码的博客看了好几个小时愣是没看懂。于是就去跪葫芦爷的,看了一下文字部分后感觉懂了不少。好吧,首先肯定要从上到下,从左到右枚举,对于某个点(i,j),会引起重复的肯定是颜色与它相同的之前已经选过的点,也就是上面这个链接中的类似保证该点是最上且最左的点。或者换句话说就是,别的与它颜色相同的点要么在它的右边,要么在它的下面,试想,这样计数是绝对不可能算重的。比如下图中在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值