题目描述
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 5e4+5;
char str[maxn];
int vis[maxn];
int main()
{
int n; //删去n个数
memset(vis,0,sizeof(vis));
scanf("%s%d",str+1,&n);
int z=strlen(str+1)-n; //保留z个数
int bac=0;
for(int i=1;i<=z;i++) //从左往右确定第i个数
{
int maxv=-1,maxpos;
for(int j=bac+1;j<=n+i;++j) //确定搜索区间,主要是上下限
{
if(vis[j]) continue;
if(str[j]-'0'>maxv)
{
maxv=str[j]-'0';
maxpos=j;
}
}
vis[maxpos]=1;
bac=maxpos;
}
for(int i=1;i<=strlen(str+1);i++)
{
if(vis[i]) cout<<str[i];
}
cout<<endl;
return 0;
}