既然两种操作一个是加1一个是减1,那么dfs时 分别dfs两种操作,最后存储到res数组中,最后再将结果进行排序比较即可。
tips:int转char 数字+‘0’ char转int char+‘0’
string 类型可以用push_back添加str[i]
sort对vector排序 sort(s.begin(),s.end(),cmp)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=25;
int n;
int a[N];
string str;
int A,B;
int len;
vector<string> res;
void dfs(int k) {
if(k==len) {
string s;
for(int i=0; i<len; i++)s.push_back(a[i]+'0'); //注意这里用push_back
res.push_back(s);
return ;
}
int x=a[k];
int y=A;
//1、利用加法向下dfs
if(A>=9-a[k]) { //A有剩余且满足a[k]到9
A-=9-a[k];
a[k]=9;
dfs(k+1);
a[k]=x;//回溯
A+=9-a[k];
} else { //A不满足a[k]到9
a[k]+=A;
A=0;
dfs(k+1);
a[k]=x;
A=y;
}
//2、利用减法向下dfs
if(B>=a[k]+1) { //能够变为9
B-=a[k]+1;
a[k]=9;
dfs(k+1);
a[k]=x;
B+=a[k]+1;
}
//此时既然不能减法变为9,那么不能在减去1了,因为减越小,应该转为加法(然而加法结果上面已经算过了)
}
int main() {
cin>>str;
len=str.size();
cin>>A>>B;
for(int i=0; i<len; i++)a[i]=str[i]-'0'; //char类型减去'0'可以转为int int加'0'可以转为char
dfs(0);
sort(res.begin(),res.end());//vector中排序写法(由小到大) 可以自定义cmp
cout<<res[res.size()-1]<<endl;
return 0;
}