题目:
#includeusing namespace std;int S,N,M;int vis[110][110]={ 0}; int ans ;int min(const int a,const int b){ return a vis[A][B]) { return ; } vis[A][B] = d; if( A ==S/2 && (A==B||A==C) || (C == S/2 && B==C)) { ans = min(ans,d); } if( A > 0 ) { if(A+B<=N) DFS(d+1,0,A+B,C); else DFS(d+1,A-N+B,N,C); if(A+C<=M) DFS(d+1,0,B,A+C); else DFS(d+1,A-M+C,B,M); } if( B > 0) { if(B+A<=S) DFS(d+1,B+A,0,C); if(B+C<=M) DFS(d+1,A,0,B+C); else DFS(d+1,A,B-M+C,M); } if( C > 0) { if(C+A<=S) DFS(d+1,C+A,B,0); if(C+B<=N) DFS(d+1,A,C+B,0); else DFS(d+1,A,N,C-N+B); }}int main(int argc, const char *argv[]){ while(cin>>S>>N>>M && (S+N+M)>0) { if(N