描述

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

格式

输入格式

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

输出格式

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

input:

8
186 186 150 200 160 130 197 220

output:

4

思路:LIS

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=;
int n;
int h[MAXN];
int dp[MAXN];
int main()
{
cin>>n;
for(int i=;i<n;i++)
cin>>h[i];
int res=;
for(int k=;k<n;k++)
{
memset(dp,,sizeof(dp));
int mx1=,mx2=;
for(int i=;i<=k;i++)
{
dp[i]=;
for(int j=;j<i;j++)
{
if(h[i]>h[j])
{
dp[i]=max(dp[i],dp[j]+);
}
}
mx1=max(dp[i],mx1);
}
for(int i=k+;i<n;i++)
{
dp[i]=;
for(int j=k+;j<i;j++)
{
if(h[i]<h[j])
{
dp[i]=max(dp[i],dp[j]+);
}
}
mx2=max(mx2,dp[i]);
}
res=max(mx1+mx2,res);
}
cout<<n-res<<endl;
return ;
}

优化后

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=;
int n;
int h[MAXN];
int dp[][MAXN];
int main()
{
cin>>n;
for(int i=;i<n;i++)
cin>>h[i];
int res=;
memset(dp,,sizeof(dp));
for(int i=;i<n;i++)
{
dp[][i]=;
for(int j=;j<i;j++)
{
if(h[i]>h[j])
{
dp[][i]=max(dp[][i],dp[][j]+);
}
}
}
for(int i=n-;i>=;i--)
{
dp[][i]=;
for(int j=n-;j>=i;j--)
{
if(h[i]>h[j])
{
dp[][i]=max(dp[][i],dp[][j]+);
}
}
}
for(int k=;k<n;k++)
{
int mx1=,mx2=;
for(int i=;i<=k;i++)
mx1=max(mx1,dp[][i]);
for(int i=n-;i>k;i--)
mx2=max(mx2,dp[][i]);
res=max(res,mx1+mx2);
}
cout<<n-res<<endl;
return ;
}

最新文章

  1. C语言 &#183; 冒泡排序
  2. 配置 Spring 的声明式事务
  3. File signature analysis failed to recognize .old file
  4. Effective Java 第三版—— 20. 接口优于抽象类
  5. ANSI C与C89、C99、C11区别差异
  6. css奇淫巧计
  7. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)
  8. flex知识点归纳
  9. hiho1255 Mysterious Antiques in Sackler Museum
  10. 历届试题 买不到的数目-(dp)
  11. spark-shuffle分析
  12. Qt 随机数
  13. 在Windows Server 2008上部署免费的https证书
  14. 安装vim with python
  15. java基础讲解12-----Swing
  16. [Leetcode Week4]H-Index
  17. nginx出现的403错误
  18. SharePoint 2010 VS.net 2010 断点调试
  19. 缓冲区溢出实战教程系列(二):dev c++编译汇编代码
  20. [QualityCenter]设置工作流脚本-根据某字段是否包含指定字符串来判断其他字段的选值

热门文章

  1. python查询IP地址所属地
  2. C语言之基本算法12—谁是冠军
  3. QT设置QToolBar带有图标和文字
  4. mysql查询当天,本周,本月,上一个月的数据(转)
  5. 《DevExpress》记录之TreeList
  6. 通过设置PHPSESSID保存到cookie实现免登录
  7. 【八】MongoDB管理之分片集群实践
  8. Idea 包名按树形结构展示
  9. linux学习系列一
  10. HDU3294 Girls&#39; research