题目链接
arr[] 1700 1701 1702 1703 1704 1705
dp1[] 1 2 3 4 5 6
dp2[] 6 5 4 3 2 1
sum[]=dp1[]+dp2[]
sum[] 7 7 7 7 7 7
7是最大的倒叙和正序的人数之和,那么要算出最少的需要改变出队,也就是删除的
n-最大人数之和+1
所以最后答案是6-7+1=0
这道题跟我上一篇的合唱队形特别相似,想了解具体思路,看我上篇文章
相似题解
需要注意的是这个跟合唱排队不同,这个是可以等于的,允许等于存在,所以一定要加上等于,缺少了就过不了测试点。
下面是代码:
#include <bits/stdc++.h>
using namespace std;
int n, arr[110], dp1[110], dp2[110], sum[110];int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> arr[i];}for (int i = 1; i <= n; i++) {dp1[i] = 1;for (int j = 1; j < i; j++) {if (arr[i] >= arr[j]) {dp1[i] = max(dp1[j] + 1, dp1[i]);}}}for (int i = n; i >= 1; i--) {dp2[i] = 1;for (int j = n; j > i; j--) {if (arr[i] >= arr[j]) {dp2[i] = max(dp2[j] + 1, dp2[i]);}}}for (int i = 1; i <= n; i++) {sum[i] = dp1[i] + dp2[i];}sort(sum + 1, sum + n + 1);cout << n - sum[n] + 1;return 0;
}
这里是红糖,记录我的小白成长史。
如果觉得对你有帮助的话可以点个赞,点个关注,创作不易,请多多支持。
我们下篇文章见!!