Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最小成本递增子序列_Algorithm_Sorting_Dynamic Programming_Binary Search - Fatal编程技术网

Algorithm 最小成本递增子序列

Algorithm 最小成本递增子序列,algorithm,sorting,dynamic-programming,binary-search,Algorithm,Sorting,Dynamic Programming,Binary Search,假设我们有一个包含N个整数的数组A。问题是,我们希望最小化从位置1开始到位置N结束的某些递增子序列(不一定严格递增)的成本。子序列的总成本是子序列中元素之间转换的总成本。在构建子序列时,从位置j转换到位置i(其中i>=j)的成本可以在矩阵成本[i][j]中找到。可以保证存在从位置1开始到位置N的递增子序列。数组中的值可能非常大 例如: N=5 A=[0,3,2,3,3] 成本= [0,INF,INF,INF,INF] [3,0,INF,INF,INF] [3,INF,0,INF,INF] [5,

假设我们有一个包含N个整数的数组A。问题是,我们希望最小化从位置1开始到位置N结束的某些递增子序列(不一定严格递增)的成本。子序列的总成本是子序列中元素之间转换的总成本。在构建子序列时,从位置j转换到位置i(其中i>=j)的成本可以在矩阵成本[i][j]中找到。可以保证存在从位置1开始到位置N的递增子序列。数组中的值可能非常大

例如:

N=5

A=[0,3,2,3,3]

成本=

[0,INF,INF,INF,INF]

[3,0,INF,INF,INF]

[3,INF,0,INF,INF]

[5,2,2,0,INF]

[6,0,3,1,0]]

成本增加最少的子序列是(A[1]、A[2]、A[5])或(0,3,3)

代价 是成本[2][1]+成本[5][2]=3+0=3

到目前为止,我已经能够修改传统的O(n^2)dp解决方案,方法是将dp[I]初始化为无穷大,dp[1]初始化为0,然后循环所有以前的值以扩展子序列。在迭代之前的值时,我只需保持最小成本


现在我想改进这个解决方案,使其成为o(nlogn)。我知道常规的LIS问题可以通过数组和二进制搜索来解决,但我无法修改这种方法来适应这个问题。

在我看来,它更像是一个图形最短路径问题,而不是LIS。在我看来,它更像是一个图形最短路径问题,而不是LIS。