P8801 [蓝桥杯 2022 国 B] 最大数字 dfs
作者:
多米尼克領主的致意
,
2024-05-14 19:13:11
,
所有人可见
,
阅读 3
因为最多17位数字 且dfs的递归方程最多只有2种
因此最多操作次数为2^17 = 131,072 足够
code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a, b;
ll n;
ll f[20];
int cnt = 1;
ll mx;
void dfs(int no, ll ans){
if(no == cnt){
mx = max(mx, ans);
return;
}
int up = 9 - f[no], down = f[no] + 1;
if(up <= a){
a -= up;
dfs(no + 1, ans * 10 + 9);
a += up;
}
else{
ll t = a;
a = 0;
dfs(no + 1, ans * 10 + t + f[no]);
a = t;
}
if(down <= b){
b -= down;
dfs(no + 1, ans * 10 + 9);
b += down;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> a >> b;
ll sum = n;
while(sum){
f[cnt++] = sum % 10;
sum /= 10;
}
reverse(f + 1, f + cnt);
dfs(1, 0);
cout << mx;
return 0;
}