洛谷 P1091 合唱隊形

傳送門

思想:兩邊最長上升子序列

#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100+10
int a[MAX] = { 0 };
int f[MAX] = { 1 };
int g[MAX] = { 0 };
int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		f[i] = 1;
		g[i] = 1;
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j < i; j++)
			if (a[j] < a[i])
				f[i] = max(f[i], f[j] + 1);
	for (int i = n; i >= 1; i--)
		for (int j = i; j <= n; j++)
			if (a[j] < a[i])
				g[i] = max(g[i], g[j] + 1);
	int m = 0, t = 0;
	for (int i = 1; i <= n; i++) {
		t = f[i] + g[i] - 1;
		if (t > m)
			m = t;
	}
	cout << n - m;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章