题意:
给出n个盆栽摆在坐标x轴上,每个盆栽有自己的种类和放置的坐标,求出最小移动几个盆栽,可以使盆栽的种类序列非递减。
思路:
其实想找到最少移动的数目,就是要知道最多有多少个不需要移动,那么直接求一遍裸的LIS即可,这里是最长非递减序列。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e3 + 10;
int a[MAXN], dp[MAXN];
int main() {
int n, m;
double x;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d%lf", &a[i], &x);
a[0] = 0;
for (int i = 1; i <= n; i++) {
dp[i] = 1;
for (int j = 1; j < i; j++) {
if (a[j] <= a[i])
dp[i] = max(dp[i], dp[j] + 1);
}
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans = max(ans, dp[i]);
printf("%d\n", n - ans);
return 0;
}