20230306线性代数日志
线性代数 2023-03-06
【NOI2020】美食家 P6772
先考虑暴力的动态规划方法,设
由于
-
广义矩阵乘法: -
要解决的问题是这个转移式第一维并不是每次增加1而是需要调回之前的状态,注意到
还差一个转移过程,即
总结:简单dp+矩阵乘法优化+倍增
BZOJ3583
不难发现,将
考虑
优化:
接下来考虑
LOJ6537
先把编号都-1,因为要用到取模
同样从普通动态规划入手,设
可以找到转移式
意义是
动态规划不能直接转移,因为会调用还没有处理好的项。这恰好是一个方程的形式,即
其中
直接高斯消元解是会炸的,这里用到一个主元法,我们发现
细节方面注意
CF963E
从动态规划入手,考虑
对于在圆外的点有
与上一题相同,本式子不能直接转移,我们考虑列出方程的形式。由于
实现方面对于每个点记录一个数组表示每个元对应的系数,注意不要忘记常数项
Odd subrectangles
首先相加的和等于计数
假设固定选一些列,那么每次选一行就相当于把结果异或上这些列这一行的异或和。
也就是说这么多列完全可以化为一列(通过异或和)来统计答案即可。
最直观的看法就是假如有
我们假设这一行有一个 1,我们把它摁死,然后其他位置任意选,会发现最后结果一定可以通过是否选这个 1 来控制成 1。
总结来说,只要有一个 1,那么这列的选择方案数就是
问题转化成把每一行看成一个二进制数,有多少方案使其异或和是0。
这个就非常经典了,用线性基即可。即
Knights Out
考虑这样一个问题,我们每次点的不是马的形状,而是只对自己和周围四个点影响应该怎么做?
这是一个入门很经典的题目,我们只需要枚举第一行的情况,然后会发现,假设第一行被固定了,在第一行的第
这样就会发现第二行的格子是否要点其实被第一行的控制了,继续推广下去可以一直到最后一行。我们再检查最后一行是否全部能被反转(因为没有别的行能够把它翻转)即可。
这个过程可以用方程模拟,设
回到马的问题,会发现其实是一个道理,我们这时候固定前两行和第一列,然后会发现在这些确定的情况下,第一行第一列只能最后被第三行第二列的格子翻转。同样列方程,主元法,解最后两行和最右边一行的情况即可。
高斯消元部分,在一般 No solution 的位置
P4151 【WC2011】 \surd$
这样思考一个问题,我们现在已经有一条路径了,我们怎么让它更优?
可能会说选择中间两个点,让他们出去绕一圈回来!
确实不假,那一个点呢?
一个点其实也可以优化,我们让这个点出去到一个环的位置,围着环绕一圈,然后原路返回,路上的值恰好被抵消了。
我们再想一下,这两个方法有什么本质上的不同吗?或者说有什么相同点?
合并起来,会发现都是选择一个环,不管有没有与原路径重合,把原来的值异或上这个环的值。
这时候我们就看到想要的形式了,我们找出来图里面的环,并且随便选择一条路径,把换线性基一下找异或最大值即可!
具体实现方面跑一棵生成树即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效