ループによる全探索

#include<iostream>
#include<algorithm>

using namespace std;
int main() {
  int A, B, X, ans = (1<<30);
  cin >> A >> B >> X;
  for ( int a = 0; a <= 20; a++ ){
    for ( int b = 0; b <= 40; b++ ){
      if ( a*1000 + b*500 < X ) continue;
      if ( a*A + b*B < ans ) ans = a*A + b*B;
    }
  }
  cout << ans << endl;
}

場合分けによる解法

#include<iostream>
#include<algorithm>

using namespace std;
int main() {
  int A, B, X, ans;
  cin >> A >> B >> X;
  if ( X % 500 != 0 ) X += 500 - X%500;
  int a = 0;
  int b = 0;
  if ( A < B ) {
    a = X/1000 + ((X%1000>0)?1:0);
  } else if ( A > 2*B ){
    b = X/500;
  } else {
    a = X/1000; X %= 1000;
    b = X/500;
  }
  
  cout << A*a + B*b << endl;
}