OUPC2012 問題A A-B Problem (AOJ 2350)
制約条件
B<A≦10^9
1≦k≦9
方針
kが9と小さいので、再帰で全通り試せばいい。
ソースコード
int A,B,k,a[20],b[20],n,pw[20],ans; void rec(int c,int borrow,int ig,int d){ if(ig>k)return; if(c==n){ ans=max(ans,d); return; } int k=a[c]-b[c]-borrow; rep(it,2){ rec(c+1,k<0,ig,d+(k<0?k+10:k)*pw[c]); if(!borrow)break; k++; ig++; } } int main(){ cin>>A>>B>>k; for(n=0;B;B/=10)b[n++]=B%10; for(n=0;A;A/=10)a[n++]=A%10; ans=0; pw[0]=1; rep(i,19)pw[i+1]=pw[i]*10; rec(0,0,0,0); cout<<ans<<endl; return 0; }