1. 程式人生 > >HDU6351-Beautiful Now

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; }