HDU6351-Beautiful Now

DFS

#include<bits/stdc++.h>
using namespace std;
string n,minans,maxans;
int k,len;

void dfs1(string s,int pos,int step){
    if(pos>=len||step>=k) {minans=min(minans,s);return;}
    bool flag=false;
    for(int i=pos+1;i<len;i++){
        if(pos==0&&s[i]=='0') continue;
        if(s[pos]>s[i]){
            string tmp=s;
            swap(tmp[pos],tmp[i]);
            flag=true;
            dfs1(tmp,pos+1,step+1);
        }
    }
    if(!flag) dfs1(s,pos+1,step);
}

void dfs2(string s,int pos,int step){
    if(pos>=len||step>=k) {maxans=max(maxans,s);return;}
    bool flag=false;
    for(int i=pos+1;i<len;i++){
        if(s[pos]<s[i]){
            string tmp=s;
            swap(tmp[pos],tmp[i]);
            flag=true;
            dfs2(tmp,pos+1,step+1);
        }
    }
    if(!flag) dfs2(s,pos+1,step);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    scanf("%d",&T);
    while(T--){
        cin>>n;
        minans=maxans=n;
        scanf("%d",&n);
        len=n.length();
        dfs1(n,0,0);
        dfs2(n,0,0);
        cout<<minans<<" "<<maxans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/algzjh/article/details/81477772