蓝桥杯2022-最大数字
作者:
blossomsym
,
2023-06-06 15:44:34
,
所有人可见
,
阅读 166
问题描述
给定一个正整数 N。你可以对 N 的任意一位数字执行任意次以下 2 种操作:
将该位数字加 1。如果该位数字已经是 9,加 1 之后变成 0。
将该位数字减 1。如果该位数字已经是 0,减 1 之后变成 9。
你现在总共可以执行 1 号操作不超过 A 次,2 号操作不超过 B 次,请问你最大可以将 N 变成多少?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=20;
string str;
int a,b;
ll ans;
void dfs(int x,ll an){//x表示当前枚举的位置,an表示当前的值
if(x==str.size()){
ans=max(ans,an);
} else{
//枚举两种情况:第一种情况,加法 第二种情况:减法
int t=str[x]-'0';
int c=min(a,9-t);
//第一种情况:加法
a-=c;
dfs(x+1,an*10+t+c);
a+=c;
//第二种情况
if(b>t){//如果b够减
b-=t-1;
dfs(x+1,an*10+9);
b+=t+1;
}
}
}
int main(){
cin>>str>>a>>b;
dfs(0,0);
cout<<ans<<endl;
return 0;
}