TOJ 4493Remove Digits(单调栈贪心)

Posted kannyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOJ 4493Remove Digits(单调栈贪心)相关的知识,希望对你有一定的参考价值。

描述

Given an N-digit number, you should remove K digits and make the new integer as large as possible.

输入

The first line has two integers N and K (1 ≤ K<N≤500000).
The next line has a N-digit number with no leading zero.

输出

Output the largest possible integers by removing K digits.

样例输入

4 2
2835

样例输出

85

题意:

给定一个n位数字,删去k个数字使之最大。

思路:

利用单调栈进行贪心,即保持栈为降序的过程中,记录删除数字的个数,删到k个即止。

#include<bits/stdc++.h>
#define MAX 500005
using namespace std;
int main()
{
    char st[MAX],ch;
    int top=-1,n,k,i;
    cin>>n>>k;
    st[++top]=9;
    getchar();
    for(i=0;i<n;i++)
    {
        ch=getchar();
        while(ch>st[top]&&k)
        {
            top--;
            k--;
        }
        st[++top]=ch;
    } 
    printf("%s",st+1);
    return 0;
}

 

以上是关于TOJ 4493Remove Digits(单调栈贪心)的主要内容,如果未能解决你的问题,请参考以下文章

TOJ 4244 Sum(单调栈区间极差)

TOJ4168: Same Digits

LeetCode 0316. 去除重复字母:单调栈

Remove K Digits

remove-k-digits

Leetcode402. Remove K Digits