1. 程式人生 > >uva11491 獎品的價值(貪心)

uva11491 獎品的價值(貪心)

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 獎品的價值(貪心)