题意
n位同学站成一排,要求满足所选同学的身高严格单调递增在递减,问最少需要几位同学出列
思路
先正的求一遍LIS,在逆着求一边LIS,最后再求以i(1<=i<=n)为一个转折点求最大的和即为所要求的人(这里要减去1不仅要防止不选还要防止选这一位置俩次),最后在用总数减去这个最大的人数即为所求答案。用贪心加二分的LIS求最长连续子序列,复杂度为o(n).
代码
1 | #include<bits/stdc++.h> |
n位同学站成一排,要求满足所选同学的身高严格单调递增在递减,问最少需要几位同学出列
先正的求一遍LIS,在逆着求一边LIS,最后再求以i(1<=i<=n)为一个转折点求最大的和即为所要求的人(这里要减去1不仅要防止不选还要防止选这一位置俩次),最后在用总数减去这个最大的人数即为所求答案。用贪心加二分的LIS求最长连续子序列,复杂度为o(n).
1 | #include<bits/stdc++.h> |
微信支付
支付宝