求算法

beiyeqingteng 2008-08-27 02:20:02
有两组数,第一组的数分别用Mi来表示0<=i<=m;另一组数用Nj来表示0<=j<=n,其中m>n.现在让Nj与Mi配对(很明显,Mi最后还有剩余,我们只要让Nj使用完毕即可),使的他们差的绝对值之和最小。
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
假设M_i(0)<=M_i(1)<=...<=M_i(n)是与N_0<=N_1<=...<=N_n相匹配的n+1个数,那么最佳匹配方案一定是:
M_i(0)与N_0匹配、M_i(1)与N_1匹配、...、M_i(n)与N_n匹配。
实际上对于a(1)<=a(2)、b(1)<=b(2)来说,一定会有|a(1)-b(1)|+|a(2)-b(2)|<=|a(1)-b(2)|+|a(2)-b(1)|,这点分情况讨论就可以总结出来。
有了上面的结论,很容易就可以通过反证法证明前面的匹配方案一定是最佳的。

基于上面所述的匹配方案,通过动态规划很容易得到答案。
将这两组数分别由小到大排好序之后,用dp(i,j)表示在Mi与Nj配对的情况下M数组前i+1个数和N数组前j+1个数的最佳匹配方案。
显然这里有i>=j、0<=i<=m、0<=j<=n
边界条件:
dp(i,0)=|Mi-N0|
状态转移方程:
dp(i,j)=|Mi-Nj|+min{dp(k,j-1) | j-1<=k<=i-1}

最后遍历所有的dp(i,n),n<=i<=m,最小值就是题目的解。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧