#include #include #define MAX_T 1000000001 int memo[MAX_T]; int A,B,T; #define min(a,b) (((a)>(b))?(b):(a)) int solve( int left){ if( left <= 0 ){ return -left; } if( memo[left] != 0 ){ return memo[left]; } int min_A = solve( left - A ); int min_B = solve( left - B ); memo[left] = min( min_A, min_B ); return memo[left]; } int main( void ){ int a_num,b_num; scanf("%d %d %d",&A,&B,&T); int min_left = MAX_T; for(b_num=0;b_num<=A;b_num++){ a_num = (T-B*b_num)/A ; a_num = a_num<0?0:a_num; int pay = B*b_num + A*a_num; if( pay < T ){ a_num++; pay += A; } int left = pay - T; min_left = min( min_left, left ); if( min_left == 0 ){ break; } //printf("pay:%d left:%d min:%d \n",pay,left,min_left); if( b_num*B > T ){ break; } } printf("%d\n",min_left + T ); return 0; }