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

原创 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,...
  • sinapme
  • sinapme
  • 2013年12月05日 17:47
  • 1467

动态规划之合唱队形问题

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

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

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

Vijos P1098 合唱队形(动态规划,双重LIS)

分别求两次最长上升序列(LIS),计算出最长满足队形的人数,即可知要出列的人数...
  • qq_35855297
  • qq_35855297
  • 2016年08月25日 08:18
  • 425

动态规划(以合唱团为例)

比较容易理解的动态规划:http://blog.csdn.net/woshioosm/article/details/7438834 关于金子问题的部分选段: 子问题: 国王需要根...
  • HYeeee
  • HYeeee
  • 2017年12月04日 20:34
  • 130

动态规划题——最短路径问题

问题描述:动态规划:求从点0到点6的最短路径及其开销 作者:何知令 完成时间:2017年5月7日 代码: /* 问题描述:动态规划:求从点0到点6的最短路径及其开销 作者:何知令 完成时间:2...
  • qq_36203090
  • qq_36203090
  • 2017年05月07日 19:17
  • 418

最长公共子序列问题(动态规划求解)

问题       求长为m的序列和长为n的序列的最长公共子序列(可以不连续),如ABCBDAB和BDCABA,BCAB和BCBA都是它们的最长公共子序列。在生物学上用来求DNA序列的匹配度。这里我们用...
  • qq_26010491
  • qq_26010491
  • 2016年02月08日 10:45
  • 1016

动态规划算法——矩阵连乘问题

动态规划算法——矩阵连乘问题 http://www.cnblogs.com/Cgsyuan/p/4867474.html 问题描述:给定n个矩阵{A1A2…An},其中Ai和Ai+1是...
  • zdy0_2004
  • zdy0_2004
  • 2015年10月11日 01:37
  • 865

最大子数组问题【动态规划】

昨天偶然上csdn,看到这个问题,学习了一种复杂度为O(n)的算法,可以计算Array的最大子数组问题。思路就是从0-length,将array累加起来,同时用一个变量max记录最大值,如果sum >...
  • u010078776
  • u010078776
  • 2014年01月08日 17:58
  • 1052

算法学习笔记(八) 动态规划的一般求解方法

动态规划(Dynamic programming,DP),是研究一类最优化问题的方法,通过把原问题分解为相对简单的子问题的方式求解复杂问题。动态规划处理的也就是是多阶段决策最优化问题,这一类问题可将过...
  • thisinnocence
  • thisinnocence
  • 2014年11月13日 08:49
  • 2401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划求解合唱队问题的思路
举报原因:
原因补充:

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