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

合唱队

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;

}

全部评论

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
被普调的六边形战士很高大:项目经历貌似和专业或者求职方向没大关系?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务