题解 | #合唱队#最长递增序列长度+最长递减序列长度-1的最大值

合唱队

http://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

/*HJ24合唱团
不允许改变队列元素的先后顺序 
且 不要求最高同学左右人数必须相等
已知所有N位同学的身高,计算最少需要几位同学出列,
可以使得剩下的同学排成合唱队形。
找最长递增递减子序列*/
#include <iostream>
#include <queue>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[3000];
	int maxx=0;//合唱序列长度最大值
	vector<int>dp0(3000,1);//递增序列长度
	vector<int>dp1(3000,1);//递减序列长度
	vector<int>dp(3000,1);//合唱序列长度
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<n;i++)//递增子序列长度 
	{
		for(int j=0;j<i;j++)
		if(a[i]>a[j]) dp0[i]=max(dp0[i],dp0[j]+1);
	}
	for(int i=n-1;i>=0;i--)//递减子序列长度 
	{
		for(int j=n-1;j>i;j--)
		if(a[i]>a[j]) dp1[i]=max(dp1[i],dp1[j]+1);
	}
	for(int i=0;i<n;i++) 
	{
		dp[i]=dp0[i]+dp1[i]-1;
		if(dp[i]>=maxx) maxx=dp[i];
//		cout<<dp0[i]<<" ";
	}	
	cout<<n-maxx<<endl;
} 
全部评论

相关推荐

02-11 17:47
已编辑
门头沟学院 Java
神哥不得了:神哥来啦~建议先在网上找一些高频的八股去背,然后再去广泛的背八股,这样的学习会更有效率一些,简历的这两个项目建议换掉,换成两个高质量的项目,这样的话获得面试的比例会更高一点,专业技能的话排版要注意一下,要加句号的话就都加,要不加就都不加,荣誉奖项的话写在教育经历里边吧,这个确实没有太多的含金量
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务