动态规划求解合唱队问题的思路

原创 2014年02月20日 15:48:00

动态规划求解合唱队问题思路:


该题的关键是不能置换队员的顺序,这个要求降低了问题的难度,如果可以排列的话就难了,建一个堆总会出现重复的元素,如何调整还没想出来怎么做。

考虑不能排列的情况,先对整个队列求一个最长递增子序列再求一个最长递降子序列。则剩下的人数就好算了。因为最长递增子序列是一个典型的动态规划问题,设子问题的解是FAscend[i]和FDescend[i]则合唱队问题的最优解是N-max[i]{FAscend[i]+ FDescend[i]-1}

关键:最优子结构的性质,递归定义子问题的解,自底向上求解

一, 最长递增子序列问题的描述:设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。

二, 最长递增子序列问题的最优子结构性质:

设f(i)表示序列中以ai为末尾元素的最长递增子序列的长度。注意此处,f(i)只表示一个长度,而并没有包含是哪个具体的序列,这是动态规划的一个显著特征。需要求是具体哪个序列需要回溯求解。

在求以ai为末尾的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即j<i,且aj<ai。

如果这样的元素存在,那么对于所有的aj,都有一个以aj为末尾元素的最长递增子序列的长度,把其中最大的f(j)选出来,那么f(i)就等于最大的f(j)+1,即f(i)=max[j]{f(j)+1},即以ai为末尾元素的最长递增子序列,等于以使f(j)最大的哪个aj为末尾元素的递增子序列最末再加上ai;

如果这样的元素不存在,那么ai自身构成一个长度为1的以ai为末尾元素的递增子序列。因为f(i)表示的长度必须以ai为末尾。

三, 实现:用f【】来保存最优值,外层循环扩大问题规模,即数组f的下表递增,内层循环遍历从i到1的子问题的最优值。

初始值f【1】=1。

相关文章推荐

动态规划__合唱队形问题

问题描述      N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。   合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分...

动态规划之合唱队形问题

问题描述:   N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,而不改变其他同学的位置,使得剩下的K位同学排成合唱队形。合唱队形要求:设K位同学从左到右依次编号为1,2…,K,他们的身高分...

动态规划之合唱队形问题(最长递增子序列变形)

题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。合唱队形定义:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1...

动态规划问题解题思路和总结

  • 2017年04月12日 14:45
  • 1021KB
  • 下载

0/1背包问题(动态规划求解)

0/1背包问题(动态规划求解)

动态规划求解矩阵连乘问题

  • 2010年11月05日 10:39
  • 2KB
  • 下载

动态规划求解矩阵数乘问题

  • 2013年06月14日 20:11
  • 3.38MB
  • 下载

动态规划法——求解0-1背包问题

动态规划法——求解0-1背包问题  问题描述 0-1背包问题与背包问题(贪心法——背包问题)最大的不同就是背包问题的子问题彼此之间没有联系,所以只要找出解决方法,然...

最大子段和问题的动态规划求解

  • 2011年05月16日 14:37
  • 69KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划求解合唱队问题的思路
举报原因:
原因补充:

(最多只允许输入30个字)