algorithm - 大尺寸二维 DP
问题描述
给定一个 n+1 元组(a 0 , a 1 , ..., a n)。
我们需要计算 F(m, n)。
鉴于:
一个0 <= 一个1 <= ... <= 一个n
F(x, y) = a y * F(x - 1, y) + F(x, y - 1)
F(0, y) = 1 对于所有 y
F(x, 0) = 一个0 x
我在考虑 dp 方法,但我面临的问题是“m”太大,可能大于十亿。
有没有办法解决这个问题?
我觉得这可以转换为矩阵求幂问题,但无法弄清楚如何?
我也是堆栈溢出和编程的新手。任何有问题的编辑建议和问题的方法/解决方案将不胜感激。
解决方案
您的“矩阵求幂”想法是正确的。
写F(x, _)
为垂直向量。(也就是说,每个 的值对应一个条目y
。)
有A
这样一个矩阵F(x+1, _) = A * F(x, _)
。一经发现,原来如此F(x+k, _) = A^k * F(x, _)
。
现在你知道了F(0, _)
。你可以找到A
. 然后通过重复平方你可以找到A^m
,现在你可以回答你的问题。
推荐阅读
- python - Airflow 2.0.0+ - 将动态生成的字典传递给由 TriggerDagRunOperator 触发的 DAG
- flutter - 如何在 2 个不同的文件之间传递变量并操作它们
- mysql - 插入但仅在满足另一个表上的条件时
- .net - 剧作家Sharp Docker镜像问题
- gruntjs - Grunt watch 不编译所有文件
- powershell - 从过滤列表中获取文件的条目
- java - 如何在使用 java 库创建 excel (xls) 文件时锁定单元格
- python - 我在 Flask 中的身份验证功能,始终允许用户进入受限页面
- java - 在java中创建parquet文件而不保存在磁盘上
- css - 如何编辑 css ::after 元素?