motu*2

DIV1目指して問題を解き続ける

AOJ 0106 Discounts of Buckwheat

概要

そば粉をnグラム買いたいと思っている。
3つの店での1袋当たりの単価と、量、
数袋買った時の割引料金が与えられるので、
一番安くなる組み合わせの金額を出力する。

解法

5000gまでしか与えられないので全探索で十分。
ngぴったりじゃないとダメなので、ngを超える
組み合わせは含まないように注意する。

コード

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    while (1) {
        int ans = 1000000;
        cin >> n;
        if (n == 0) break;
        for (int a = 0; a <= 50; a++) {
            for (int b = 0; b <= 50; b++) {
                for (int c = 0; c <= 50; c++) {
                    int sum = (380 * (5 * (a / 5))) * 0.8 + (a % 5) * 380;
                    sum += (550 * (4 * (b / 4))) * 0.85 + (b % 4) * 550;
                    sum += (850 * (3 * (c / 3))) * 0.88 + (c % 3) * 850;
                    if (a * 200 + b * 300 + c * 500 == n) {
                        ans = min(ans, sum);
                    }
                }
            }
        }
        cout << ans << endl;
    }
    return 0;
}