代码如下
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <math.h>
#include <stack>
using namespace std;
int num[251]={0};
int len(int a)
{
int i=0;
while(a>0)
{
a=a/10;
i++;
}
return i;
}
void nu(int a)
{
int k=len(a);
while(a>0&&k>0)
{
num[k]=a%10;
a=a/10;
k--;
}
}
stack<int> s;
int nm=0;
long long mn=9223372036854775807,now_num=0;
int dp(int k,int l)
{
if(nm==0)
{
s.push(0);
nm++;
}
if(k>1)
{
k--;
for(int i=s.top()+1;i<=l-k;i++)
{
s.push(i);
now_num+=pow(10,k)*num[i];
dp(k-1,l);
now_num-=pow(10,k)*num[i];
s.pop();
}
}
else if(k<=1)
{
for(int i=s.top()+1;i<=l;i++)
{
s.push(i);
now_num+=pow(10,0)*num[s.top()];
if(now_num<mn)
{
mn=now_num;
}
now_num-=pow(10,0)*num[s.top()];
s.pop();
}
}
}
int main()
{
int n,k;
cin>>n>>k;
nu(n);
dp(len(n)-k,len(n));
cout<<mn;
return 0;
}