题意:给一个n长度的整数,删掉 k 个数字,使得剩下的数字最大。
分析:还剩 n-k 个数字,就是在原序列里面,相对顺序不变的情况下,这个n-k个数字组成的数最大。
感觉没有什么特别好的方法策略,看了一下方案,策略是:
不断的调整这n-k个数字,感觉这个时间复杂度受不了,哈哈~~~
如何调整:当我确定的 K 个数字 + 还剩下的 n - i 个数字 > n - k ,那么这里就会有调整,调整到恰好 >= c 的位置处。
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+5; char a[maxn]; int main(int argc, char const *argv[]) { int n,d; while(scanf("%d%d",&n,&d),n) { getchar(); int k = 0; for(int i = 0; i < n; i++) { char c = getchar(); while(k>0&&i-k<d&&a[k]<c) k--; if(k+d<n) a[++k] = c; } a[++k] = '