也是贪心的策略,略有不同的是,当前状态影响的是之前的决策。
如果当前点比栈顶元素大就擦去栈顶元素,直到擦不了为止。
#include <iostream>
#include <cstdio>
const int MaxN = 100000 + 20;
char s[MaxN];
inline int readchar(){
char sh = getchar();
while(sh==' ' || sh == '\n') sh = getchar();
return sh;
}
int main()
{
int n,k,left,x,i,top;
while(~scanf("%d",&n) && n) {
scanf("%d",&k); left = n-k;i=1;top=0;
for(;i<=n;i++) {
x = readchar();
while(top && k && x > s[top-1]) {
top--; k--;
}
s[top++] = x;
if(!k) break;
}
if(!k) {
s[top] = 0;
printf("%s",s);
for(; i<n; i++) putchar(getchar());
putchar('\n');
}else {
s[left] = 0;
printf("%s\n",s);
}
}
}