救救我这个蒟蒻(帮我看下哪里错了)……
查看原帖
救救我这个蒟蒻(帮我看下哪里错了)……
541120
jzy20100224楼主2021/8/22 20:23

代码如下

#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;
}
2021/8/22 20:23
加载中...