OUPC2012 問題A A-B Problem (AOJ 2350)

問題

日本語なので本文参照(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=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;
}