题解 | #合唱队# 动态规划

合唱队

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

#include #include #include

using namespace std;

int main() { int N; cin >> N;

vector<int> height(N);

for (int i = 0; i < N; i++)
{
	cin >> height[i];
}

vector<int> raise(N);
vector<int> down(N);

raise[0] = 0;
down[N - 1] = 0;

for (int i = 0; i < N; i++)
{
	for (int j = 0; j < i; j++)
	{
		if (height[i] > height[j])
		{
			raise[i] = max((raise[j] + 1), raise[i]);//使用动态规划的方法找到从开头到当前位置,最长的递增序列(不包括第i个元素)
		}
	}
}

for (int m = N-1; m >= 0; m--)
{
	for (int n = N - 1; n > m; n--)
	{
		if (height[n] < height[m])
		{
			down[m] = max((down[n] + 1),down[m]);//使用动态规划的方法找到到当前位置到末尾,最长的递减序列(不包括第i个元素)
		}
	}

}

int g,max=0;
for (int k = 0; k < N; k++)
{
	g = raise[k] + down[k]+1;//求解第i个位置的递增递减序列的和
	max = (g > max) ? g : max;//求解第i个位置,递增递减序列的最长的值是多少
}
cout << (N-max) << endl;//总的人数减去有用的人数就得到了该被提出退伍的人数


return 0;

}

全部评论

相关推荐

2024-12-27 10:21
已编辑
海南师范大学 媒介策划
到我怀里来:身高体重住址这些就别写了,留几个关键的就行,工作经历突出重点写详细点
点赞 评论 收藏
分享
01-26 18:45
门头沟学院 Java
一天代码十万三:哥们实习再包一下吧,产出太笼统了,尽量体现业务
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务