完全背包与最短路
_farawaystar_ · · 个人记录
今天做一个最短路题,误认成背包,怎么也写不出来状态转移方程,结果突然想到用最短路,成功推出正解。
在思考的时候也有一个很神奇的思路冒出来了:
完全背包是不是可以用最短(长)路来做(限制条件众多但是这里仅提供一下思路)。
假设有一个体积为
1.建立
2.建立一个数组
(
举个例子:
三个物品,一个体积为
则
)
3.二重循环枚举每一个点对
然后
不难发现从源点到
时间复杂度:
-
对于体积均为正的物品来说,建立图为DAG,跑DAG最短路的时间复杂度
\Theta(V^2) -
对于体积不一定为正的物品来说,建立图非DAG,跑Dijkstra最短路的时间复杂度
\Theta(V^2 \log V)
限制:时空复杂度偏高。
优势:可以处理有物品体积为负的完全背包问题(今天遇到的奇葩问题:选的过程中体积不能超过背包大小也不能为负)。
谢谢大家……
(
寻求大佬帮助:
-
该思想是否正确。
-
是否可以优化时空复杂度。
-
可否推广至其它类型背包问题。
)