合唱队形【DP】

给定N位同学的身高,音乐老师需要请(N-K)位同学出列,使得剩下的K位同学能排成合唱队形,即身高满足特定顺序。问题转化为求解最长不下降序列的变形。通过动态规划方法解决,输出最少需要出列的同学数。
摘要由CSDN通过智能技术生成

> Description
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<…Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。


> Input
输入的第一行是一个整数N(2<=N<=100),表示同学的总数。第二行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。


> Output
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。


> Sample Input
8
186 186 150 200 160 130 197 220


> Sample Output
4


> 解题思路
(代码十分的丑陋,各位还是不要看了)
还是用动态规划解题。
其实这一道题就是最求最长不下降序列的变形,只是分为了两段不同方向的。然后把它加到一起又开始令人秃头了,调这里调了超级久。


> 代码

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=101;
int y,a[maxn],f[maxn][maxn],n,ans=maxn;
//y为临时变量算出第二段的最大数,a存初始身高,f存最长不下降序列,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值