uva11491 獎品的價值(貪心)
阿新 • • 發佈:2018-02-19
uva div 出棧 mark tdi 數位 如果 har con
uva11491 獎品的價值(貪心)
給你一個n位的整數,請你刪除其中的d個數字,使得整數盡可能大。1<=d<n<=1e5。
首先因為前面的數位更重要,所以從左往右將每一位數字加入棧中。如果它比棧頂的大,就把棧頂的刪掉,因為這樣數肯定更大。如果刪滿了d個,就不再彈出棧頂了。如果全部掃完都刪不滿d個,只需舍棄最後的數位,使被刪的數達到d即可。
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e5+5;
int n, m, lens, tail, dis;
char s[maxn], ans[maxn];
int main(){
while (~scanf("%d%d", &n, &m)&&n){
scanf("%s", s);
tail=0; dis=0;
for (int i=0; i<n; ++i){
while (tail>0&&dis<m&&ans[tail-1]<s[i])
--tail, ++dis;
ans[tail++]=s[i];
}
for (int i=0; i<n-m; ++i)
printf("%c", ans[i]);
puts("");
}
return 0;
}
uva11491 獎品的價值(貪心)