最大数字
问题描述
给定一个正整数 𝑁。你可以对 𝑁 的任意一位数字执行任意次以下2种操作:
将该位数字加 1 。如果该位数字已经是 9 , 加 1 之后变成 0 。
将该位数字减 1 。如果该位数字已经是 0 , 减 1 之后变成 9 。
你现在总共可以执行 1 号操作不超过 𝐴 次, 2 号操作不超过 𝐵 次。 请问你最大可以将𝑁 变成多少?
输入格式
第一行包含 3 个整数:
𝑁,𝐴,𝐵
输出格式
一个整数代表答案。
样例输入
123 1 2
copy
样例输出
933
copy
样例说明
对百位数字执行 2 次 2 号操作, 对十位数字执行 1 次 1 号操作。
评测用例规模与约定
对于 30% 的数据, 1≤𝑁≤100;0≤𝐴,𝐵≤10
对于 100% 的数据, 1≤N≤10 17;0≤A,B≤100
运行限制
最大运行时间:1s
最大运行内存: 512M
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
string s;
int a, b;
ll ans;
void dfs(int x, ll res)
{
int t = s[x] - '0';
if(s[x])
{
int c = min(a, 9 - t)
a -= c;
dfs(x + 1, res * 10 + c + t);
a += c;
if(b > t)
{
b -= (t + 1);
dfs(x + 1, res * 10 + 9);
b += (t + 1);
}
}
else
{
ans = max(ans, res);
}
}
int main()
{
cin >> s >> a >> b;
cout << ans << endl;
return 0;
}