40pts, 自己拍了半天也没拍出来有什么错,求大佬hack。
#include <bits/stdc++.h>
using namespace std;
long long n, ans, dgt[20], ten[20];
int a, b, num[20], len;
void init(long long x){
int t = 1; dgt[1] = x, ten[0] = 1, ten[1] = 10;
while(x) num[++len] = x%10, x /= 10, t *= 10;
reverse(num + 1, num + len + 1);
for(int i = 2; i <= len; i++)
t /= 10, dgt[i] = dgt[i-1] - num[i-1] * t, ten[i] = ten[i-1] * 10;
}
void dfs(int x, int y, int z, long long sum){
if(x == len){ ans = sum; return; }
if(9 - num[x+1] > a - y && num[x+1] + 1 > b - z){
sum += (num[x+1] + a - y) * ten[len-x-1] + dgt[x+2];
for(int i = x + 2; i <= len; i++)
if(num[i] + 1 <= b - z) sum += (9ll - num[i]) * ten[len-i], z += num[i] + 1;
ans = max(ans, sum); return;
}
if(9 - num[x+1] <= a - y) dfs(x + 1, y + 9 - num[x+1], z, sum + 9ll * ten[len-x-1]);
if(num[x+1] + 1 <= b - z) dfs(x + 1, y, z + num[x+1] + 1, sum + 9ll * ten[len-x-1]);
}
int main(){
scanf("%lld%d%d", &n, &a, &b);
init(n);
dfs(0, 0, 0, 0);
printf("%lld", ans);
return 0;
}
挺无语的,暴搜都能错T^T