给一个数列,问最少修改多少个元素使数列严格递增。如果不是要求“严格”递增,那就是求最长不降子序列LIS,然后n-LIS就是答案。要严格递增也好办,输入的时候用每个数减去其下标处理一下就行了。

/*
 * Author    : ben
 */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <functional>
#include <numeric>
#include <cctype>
using namespace std;
const int MAXN = 100010;
int a[MAXN];
vector<int> v;
int work() {
    int n;
    scanf("%d", &n);
    v.clear();
    vector<int>::iterator it;
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        a[i] = a[i] - (i + 1); //每一个数减去其所在位置的序号
    }
    v.push_back(a[0]);
    for (int i = 1; i < n; i++) {
        if (a[i] >= *(v.end() - 1)) {
            v.push_back(a[i]);
        } else {
            it = upper_bound(v.begin(), v.end(), a[i]);
            *(it) = a[i];
        }
    }
    return n - v.size();
}
int main() {
    int T;
    scanf("%d", &T);
    for (int t = 1; t <= T; t++) {
        printf("Case #%d:\n%d\n", t, work());
    }
    return 0;
}

 

相关文章:

  • 2022-12-23
  • 2021-07-02
  • 2022-12-23
  • 2021-08-11
  • 2021-08-21
  • 2021-12-14
  • 2021-12-25
猜你喜欢
  • 2021-04-19
  • 2021-07-06
  • 2021-12-18
  • 2021-07-04
  • 2021-11-24
  • 2021-05-21
  • 2022-12-23
相关资源
相似解决方案