Hướng dẫn bài STUPATM - Máy rút tiền tự động (Khờ)

Trùm CUỐI 2020-04-11 7:20:29 2020-04-11 8:00:56

Mỗi một phương án trả tiền có dạng một vec-tơ (x_1,x_2,\ldots,x_n) , trong đó x_i\in \{0,1\} sao cho {x_1\times t_1+x_2\times t_2+\ldots+x_n\times t_n=M} .

Chú ý: Bài toán này chỉ yêu cầu tìm một nghiệm bất kỳ.

Ta có thể cài đặt duyệt toàn bộ bằng quay lui hoặc xét dãy bit

Duyệt quay lui:

int x[nmax];//Vec-tơ nghiệm
void BT(int i, long long sum) {
    if (i > n) {
        if (sum == M) {
            inKQ();
            exit(0);    //Kết thúc chương trình, (không phải return)
        }
        return;
    }
    for (int j = 0; j <= 1; j++) {
        if (j * t[i] + sum <= M) {
            x[i] = j;
            BT(i + 1, sum + j * t[i]);
        }
    }
}