博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
板板题——预处理+矩阵+定义新运算
阅读量:5905 次
发布时间:2019-06-19

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

板板题:

• 给出一张有向图,每个点有得分

• 每次经过一个点你就可以获得它的得分(是正数)(多次计算)
• 你可以走 ? 步,然后选择其中连续的一段不超过 ? 的时间,将这
一段的时间的得分翻倍
一旦不能走了就必须停止
• 求最高得分
• ? ≤ 300, ? ≤ ? ≤ 109

题解:

这个l时间挺复杂。如果没有它呢?

首先我们可以dp,f[i][j]表示,在i点,走了j步,最大得分。

不能走了必须停止,那么如果i没有出点,就直接转移到f[i+1][j],也相当于走一个自环。

把自环连上,然后可以矩阵乘法优化。

 

但是这个l非常棘手啊。

首先由于点权都是正数,所以一定l次翻倍最优。

并且,这l步怎么走和之间的收益没有关系,是独立出来的。而且连续。

 

设点数没有翻倍的转移矩阵是A

那么,我们可以处理一个点数翻倍的转移矩阵B

ST*(B^l),中的每个点的值就是从i到j经过l步走到的最大收益。

但是,从哪一步开始走这l步呢?

即,我们要求:$\sum_{i=1}^{m-l-1} A^i*B^l*A^{(m-l-1-i)}$

其中,求和表示按位求最大值,*表示矩阵乘法

设$M=B^l$

那么,我们要求:$\sum_{i=1}^{T} A^i*M*A^{(T-i)}$

直观来讲,就是考虑把i个A放在M左边,T-i个A放在M右边。

直接枚举还是爆炸!

T是1e9的。

能不能设计一个快速幂求出来呢?

但是很显然,直接矩阵乘法无法转移。

所以,看来要定义新运算了。

 

以下开始重点(划重点!)

维护一个数对(L,R),其中,(L0=M,R0=A),0表示0次方,即初始状态。

我们定义:

一个位置可能不够了,所以要定义一个pair(matrix,matrix)

构造思路,能够从$(L,R)^T$中找到答案。
按位取max操作必须能覆盖所有的$AA...MAA...$
而且能用固定的运算得到答案。
而且必须有结合律,以便支持快速幂
于是我们定义:
$(L_i,R_i)\bigodot(L_j,R_j)=(L_i*R_j+R_i*L_j,R_i*R_j)$
其中,$\bigodot$是定义的新乘法符号。*表示矩阵乘法。+表示二者按位取max
那么,我们要求的是:
$(L_k,R_k)=(L_0,R_0)\bigodot(L_0,R_0)\bigodot(L_0,R_0)...$
可以发现,每次的$R_i*R_0$到后面就是$A^{i+1}$
而,我们所关心的$L$
$L_i*R_0$把之前的所有AAM,AMA,MAA后面加了一个A
然后,$R_i*L_0$又得到了AAAM,
其实就已经遍历了AAMA,AMAA,MAAA,AAAM
其实本质就是一个数学归纳法,可以证明:
我们遍历了$\sum_{i=1}^{T} A^i*M*A^{(T-i)}$
按位取max是成立的,因为从不同点出发,可能最优情况下选择的翻倍位置是不同的。
所以新运算是正确的。
因为,我们就是在凑一个$AA...MAA...$
由于我们考虑了把AAAA放在的所有位置。
所以这个运算有结合律。
就可以快速幂啦~!

 

转载于:https://www.cnblogs.com/Miracevin/p/9755729.html

你可能感兴趣的文章
CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动...
查看>>
The Oregon Trail 俄勒冈之旅
查看>>
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
更改UIView的背景
查看>>
APUE第15章学习扎记之程序的存储区布局试验
查看>>
ubuntu升级16.04 inter idea 中文输入法无效
查看>>