问题:

合唱队形安排问题(使用动态规划和分治算法求解)
问题描述:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,其余人位置不变,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<…Ti+1>…>TK(1<=i<=K)。已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

解:

  • 动态规划方法:

先从左到右找出当前数字的最长递增序列,并计算出长度,然后同理找出从右到左的最长递增序列,最后再将得出的两个序列按照对应位置相加然后减一得出的列表即为当其为合唱队中间人时,合唱队的长度。之所以减一,是因为相加是,加了两遍自己。

# -*- coding: utf-8 -*-
"""
Created on Tue Oct 25 10:24:45 2022@author: Dell
"""# 每个人的左边出现的最多人(输出左_最长递增子序列)
def left_max(l):#l为站成一排的同学序列ans=[1]*len(l)for i in range(len(l)):# 每个人的游标(从前往后)for j in range(i):# 这个人前面每个人的游标if l[j]<l[i] and ans[j]+1>ans[i]:ans[i]=ans[j]+1return ans # 1 1 1 2 2 1 3 4# 每个人的右边出现的最多人(输出右_最长递增子序列)
def right_max(l):ans=[1]*len(l)for i in range(len(l)-1,-1,-1):# 每个人的游标(从后往前)for j in range(i+1,len(l)):# 这个人后面每个人的游标if l[j]<l[i] and ans[j]+1>ans[i]:ans[i]=ans[j]+1return ans # 3 3 2 3 2 1 1 1while True:N=8 #tall_li_str=input().split()tall_li_int=[165, 182, 178, 149, 193, 179, 174, 158] left_li=left_max(tall_li_int)right_li=right_max(tall_li_int)sum_li=[]  #left_li和right_li加和,可以得到每个人如果是中间那个人的话,合唱队最长是多少for i in range(len(left_li)):sum_li.append(left_li[i]+right_li[i])print('最少要出列',N-max(sum_li)+1,'位同学')#题中问的是最少去几人,也就是总人数减去合唱队最多人数# 另外加和时自己算了两遍,还得再减去一遍break

运行结果:

  • 分治法
import bisect
def max_order(lists):list_num = [] #用于排序,list_max = [] #每个元素右边的最大数(包括元素自己)for i in lists:local = bisect.bisect_left(list_num, i)if local == len(list_num):list_num.append(i)list_max.append(local+1)else:list_num[local] = ilist_max.append(local+1)return list_maxwhile True:N = 8tall_li_int = [165, 182, 178, 149, 193, 179, 174, 158]left_li = max_order(tall_li_int)right_li = max_order(tall_li_int[::-1])[::-1]sum_s = []for i in range(len(left_li)):# left_s[i]+right_s[i]-1表示此人是中间位置的人时,合唱队的人数sum_s.append(left_li[i]+right_li[i]-1)print('最少要出列',str(N-max(sum_s)),'位同学')break

运行结果:

动态规划和分治法解合唱队形问题相关推荐

  1. C语言实现最大字段和(动态规划法和分治法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.动态规划法 二.分治法 三.程序总代码 总结 前言 本次将对最大字段和使用C语言实现的两种方法实现,动态规划法和分 ...

  2. 动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会

    每次体会算法都有新的感觉,刷题越多,对算法的理解感觉也就越深刻. 下面我们来重新体会下分治法,动态规划,贪心法,递归的理解. 1.分治法: 将问题分成单独的阶段,每个阶段互相不干扰很独立,如10米长的 ...

  3. 计算机基础 - 动态规划、分治法、memo

    动态规划 ≈ 分治法 + memo def memo(func):cache = {}def wrap(*args):if args not in cache:cache[args] = func(* ...

  4. 动态规划和分治法的区别

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题, ...

  5. 最大子段和(动态规划及分治法)

    动态规划法: 首先给一个任意的序列来说明这个问题 1 2 3 -1 -5 4 5 8 首先设一个dp数组,dp[i]表示前i个区间的最大子段和 如果dp[i-1] > 0,那么dp[i] = d ...

  6. 分治法的关键特征_经典算法思想2——分治(Divide-and-Conquer)

    分治法,字面意思是"分而治之",就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这 ...

  7. 分治法之图解最大子序列和

    分治法Q1--最大子序列和 问题描述(最大区段问题)给定一个长度为n的整数序列,求它的最大连续子序列和-2,1,-3,4,-1,2,1,-5,4 最大连续子序列和为4+(-1)+2+1=6注意题目说最 ...

  8. 珍宝鸭的力扣练习(7):分治法题目合集

    动态规划和分治法的区别 动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解. ...

  9. 算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题

    一.名称 分治法应用 二.目的 1.掌握分治法的基本思想: 2.学会运用分治法解决实际系统设计应用中碰到的问题. 三.要求 1.实现基于分治法思想的合并排序: 2.实现基于分治法思想的快速排序: 3. ...

  10. 分治法的计算时间、时间复杂度推导以及经典算法分析

    分治是一种解决复杂问题的思想,它可以将一个问题划分成多个小的问题,通过合并这些问题求得原问题的解.本文对分治法进行复杂性分析,并通过这种方法分析几个具体算法的时间复杂度. 文章目录 1 分治法的复杂性 ...

最新文章

  1. python四十五:归一化继承
  2. 线性代数笔记:Frobenius 范数
  3. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...
  4. matlab-游标及查询
  5. android 弹出对话框时显示键盘
  6. python tkinter进度条_在python3.7中更新tkinter进度条
  7. mysql数据库,当数据类型是float时,查询居然查询不出数据来
  8. 数据挖掘的好书_唐宇迪:入门数据挖掘,我最推荐这本书
  9. 警告—系统—srv—2013—无
  10. 关于使用Aptana+Pydev构建Python开发环境(Django)
  11. mexcuda输入nvcc中的参数
  12. myeclipse导入项目
  13. 计时器setInterval()、setTimeout()
  14. python @property的介绍与使用
  15. 使用plsql导出表结构和表数据和存储过程
  16. CAD工程制图基础命令(简洁版)
  17. a5松下驱动器参数设置表_松下a5伺服参数设置详解
  18. 西门子1200PLC模拟量测温案例
  19. MindSpore联邦学习框架解决行业级难题
  20. Python 编程从入门到实践 11-3

热门文章

  1. 飞马哥:正确推广模式框架的解析
  2. 中国土地交易数据库:300w数据中国土地高频交易数据2000-2022
  3. cad角度命令怎么输入_CAD中用好这个命令,任意等分角度不再是难事
  4. linux bond 网卡带宽,Linux网卡绑定实现带宽翻倍
  5. 许丹萍 计算机系,【晋江市“十佳少先队辅导员”】第二实验小学老师许丹萍: 关注每一个队员的成长...
  6. 对时间序列做分段相关性分析(matlab代码)
  7. vcenter server 添加主机失败
  8. 《增长黑客》- 读书笔记(一)
  9. IT软件下载地址大全
  10. 神经机器翻译中的曝光偏差,幻觉翻译与跨域稳定性