正序逆序各求一遍LIS
枚举每个人, 计算以他为中心点左右个需要移走多少人, 相加, 最终取min即可
不知道为什么我的总是比答案小一qaq
测试了一组样例, 显然应该输出0, 但我的输出"-1", 所以最终输出ans+1 qwq
1 52 1 2 3 2 1
代码君qwq
1 #include2 #include 3 using namespace std; 4 const int sz = 110; 5 int n, ans = 1<<30; 6 int f[sz], lis1[sz], lis2[sz]; 7 int main() { 8 scanf("%d", &n); 9 for(int i = 1; i <= n; i++) 10 scanf("%d", &f[i]);11 for(int i = 1; i <= n; i++) {12 lis1[i] = 1;13 for(int j = 1; j < i; j++) {14 if(f[j] < f[i] && lis1[j] + 1 > lis1[i])15 lis1[i] = lis1[j] + 1;16 }17 // printf("lis1[%d]: %d\n", i, lis1[i]);18 }19 // cout< = 1; i--) {21 lis2[i] = 1;22 for(int j = n; j > i; j--) {23 if(f[j] < f[i] && lis2[j] + 1 > lis2[i])24 lis2[i] = lis2[j] + 1;25 }26 // printf("lis2[%d]: %d\n", i, lis2[i]);27 }28 for(int i = 1; i <= n; i++) {29 int mid = 0;30 mid = (i - lis1[i]) + (n - i - lis2[i]);31 if(mid < ans) ans = mid;32 }33 printf("%d", ans+1);34 return 0;35 }