题目: P8801
#include<bits/stdc++.h>
using namespace std;
const int MAXN=25,MAXA=105;
long long dp[MAXN][MAXA][MAXA],n,a,b;
int num[25],num2[25],len;
void getnum(long long x){
if(x==0)len=1;
while(x){
num2[++len]=x%10;
x/=10;
}
for(int i=1;i<=len;i++){
num[i]=num2[len-i+1];
}
}
long long getdp(){
getnum(n);
for(int i=1;i<=len;i++){
for(int j=num[i];j<=9;j++){
int usea=j-num[i],useb=num[i]-j;
if(useb<0)useb+=10;
if(usea<=a){
for(int k=0;k<=a-usea;k++){
for(int m=0;m<=b;m++){
dp[i][k][m]=max(dp[i][k][m],dp[i-1][k+usea][m]*10+j);
}
}
}
if(useb<=b){
for(int k=0;k<=a;k++){
for(int m=0;m<=b-useb;m++){
dp[i][k][m]=max(dp[i][k][m],dp[i-1][k][m+useb]*10+j);
}
}
}
}
}
}
int main(){
cin>>n>>a>>b;
getdp();
long long ans=0;
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++)ans=max(ans,dp[len][i][j]);
}
cout<<ans;
return 0;
}