algorithm - 最小成本增加子序列
问题描述
假设我们有一个包含 N 个整数的数组 A。问题是我们希望最小化一些从位置 1 开始到位置 N 结束的递增子序列(不一定严格递增)的成本。子序列的总成本是子序列中元素之间转换的总成本。在构建子序列时,从位置 j 转换到位置 i 的成本,其中 i >= j 可以在矩阵 COST[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)。
成本为 COST[2][1] + COST[5][2] = 3 + 0 = 3。
到目前为止,我已经能够修改传统的 O(n^2) dp 解决方案,方法是将 dp[i] 初始化为无穷大,将 dp[1] 初始化为 0,然后循环遍历所有先前的值以扩展子序列。在迭代以前的值时,我只是保持最低成本。
现在我想改进这个解决方案并使它成为 o(nlogn)。我知道可以使用数组和二进制搜索来解决常规 LIS 问题,但我无法修改这种方法来解决这个问题。
解决方案
推荐阅读
- android - 如何修复 Xamarin.Android 中的“[FirebaseMessaging] 无法记录事件:缺少分析库”
- highcharts - Highchart 甘特图没有重叠
- html - 如何在 CSS 中放置图片而不是视频?
- rest - 微软图形/Outlook REST;使应用程序上线/公开以供我们的客户使用的过程是什么?需要多长时间?
- ios - 如何在降压构建上运行 xcconfig
- python-3.x - 如何使用python3将值附加到列表中?
- mysql - MySQL Union 语句和计数
- dynamic - SAP HANA - 如何创建一个查看 x 日期的动态查询,为我提供 x 日期前后 2 周的所有记录?
- javascript - 如何删除 Chart.js x Axis 底线?
- php - 控制器中的 Laravel 5.8 问题试图访问数组