algorithm - 对 DP 表中的一行进行排序以提取解决方案是否常见?
问题描述
我有两个长度相同的输入数组n包含正整数。n始终是偶数。使用此输入,我必须构建一个长度为n的新数组,其中包含每个输入数组的n/2 个元素,并且在新数组的每个索引处,必须有一个元素位于两个输入数组之一的相同索引处。新数组中所有条目的总和必须尽可能低。换句话说,我必须比较每个索引处的两个输入数组,并以使用每个数组的n/2个条目的方式选择它们以使总和尽可能低。
我的方法是创建一个 3 行的 DP 表。第 1 行是输入数组1 ,第 2行是输入数组2 ,第 3 行是差值(数组 1 - 数组 2)。为了提取解决方案,我将按照第 3 行的升序对表格进行排序。
我的问题是这是否是(常见的)做法或/以及是否有更好的解决方案。
解决方案
解决您的问题的可能方法是将 DP 状态定义为:-
Number of Elements that can be selected from Array1 :- n1
Number of Elements that can be selected from Array2 :- n2
Index of element in new array :- i
我们知道n1
+ n2
= n
= 数组的长度。
和
n1
= n2
=n/2
所以在某种程度上,我们可以说n1
和n2
是相关的,因此只存储其中一个就足以定义一个 DP 状态。
DP状态:-(index, number of elements that can be selected from Array1)
初始状态:-(0,n/2)
过渡:- 在每个索引处,我们可以从 Array1 或 Array2 中选择元素,并且我们希望最小化成本。
f(i,x) = min(Array1[i]+f(i-1,x-1) , Array2[i]+f(i-1,x))
这个递归会给你答案。
构建一个 DP 表将在 O(n^2) 内解决这个问题。
推荐阅读
- javascript - 我们如何为不同的请求类型编写 Joi 模式?
- azure-devops - Azure Devops:如何在发布管道期间添加自动化集成测试
- laravel - 一次更新多行 Laravel Eloquent
- mysql - mysql关闭太频繁
- scala - 使用 .ca-bundle、.crt 和 .key 文件为 Akka 服务器设置 https 支持
- react-native - Linking.addEventListener 在本机反应中不起作用
- reactjs - 屏幕更改方向监听器 ReactJS
- api - 在 kerberos 数据库中找不到 KDC 服务器
- reactjs - 如何将使用钩子的 React 功能组件转换为类?
- java - 在运行时读取压缩图像 + 最佳图像压缩工具