#include <bits/stdc++.h>
using namespace std;
int N, M, cost, ans;
vector<int> s, t, c, a, b, p, m, temperature;
void Try(int k) {
for (int i = 1; i >= 0; --i) { // Đang xét điều hòa thứ k (có thể chọn (i=1) hoặc không chọn (i=0)).
if (i == 1) { // Nếu chọn điều hòa thứ k,
cost += m[k]; // cộng thêm vào chi phí hiện tại (cost),
for (int j = a[k]; j <= b[k]; ++j) {
temperature[j] -= p[k]; // giảm nhiệt độ các ô tương ứng nếu chọn điều hòa thứ k
}
}
if (k == M) { // Nếu đã xét đến điều hòa cuối cùng (mỗi điều hòa đều có trạng thái chọn hoặc không chọn) thì tiến hành kiểm tra cách chọn hiện tại.
bool checking = true; // Kiểm tra các con bò có thỏa mãn hay không.
for (int j = 1; j <= N; ++j) {
bool valid = true; // Kiểm tra mọi ô của con bò thứ j có thỏa mãn hay không.
for (int l = s[j]; l <= t[j]; ++l) { // Duyệt qua các ô của con bò thứ j.
if (temperature[l] > -c[j]) { // Nếu tồn tại một ô chưa đủ mát,
valid = false; // thì con bò j không thỏa mãn,
break; // và lập tức dừng, không cần kiểm tra các ô khác của con bò này.
}
}
if (!valid) { // Nếu có tồn tại một con bò không thỏa mãn,
checking = false; // thì cách chọn điều hòa hiện tại không thỏa mãn,
break; // và lập tức dừng, không cần kiểm tra các con bò khác
}
}
if (checking) { // Nếu cách chọn điều hòa này thỏa mãn toàn bộ các con bò,
ans = min(ans, cost); // thì cập nhật đáp án.
}
} else { // Nếu điều hòa đang xét chưa phải điều hòa cuối cùng,
Try(k + 1); // thì xét tiếp điều hòa k+1.
}
if (i == 1) { // Nếu lúc nãy có chọn điều hòa thứ k, thì phải trả lại trạng thái ban đầu trước khi chọn điều hòa thứ k.
cost -= m[k]; // Lúc nãy có cộng chi phí vào nếu chọn điều hòa thứ k, thì bây giờ phải trừ đi.
for (int j = a[k]; j <= b[k]; ++j) {
temperature[j] += p[k]; // Lúc nãy có trừ nhiệt độ nếu chọn điều hòa thứ k, thì bây giờ phải cộng lên.
}
}
}
}
void Solve() {
// Nhập dữ liệu
cin >> N >> M;
s.resize(N + 1), t.resize(N + 1), c.resize(N + 1);
for (int i = 1; i <= N; ++i) {
cin >> s[i] >> t[i] >> c[i];
}
a.resize(M + 1), b.resize(M + 1), p.resize(M + 1), m.resize(M + 1);
for (int i = 1; i <= M; ++i) {
cin >> a[i] >> b[i] >> p[i] >> m[i];
}
temperature.assign(101, 0); // Ban đầu nhiệt độ của 100 ô bằng 0.
ans = 1e9; // lưu kết quả (answer)
Try(1); // Đệ quy để xét toàn bộ các cách chọn điều hòa (mỗi điều hòa từ thứ 1 đến thứ M phải có một trong hai trạng thái: chọn hoặc không chọn).
cout << ans;
}
int main() {
ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0);
if (fopen("test.inp", "r")) {
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
}
Solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgTiwgTSwgY29zdCwgYW5zOwp2ZWN0b3I8aW50PiBzLCB0LCBjLCBhLCBiLCBwLCBtLCB0ZW1wZXJhdHVyZTsKCnZvaWQgVHJ5KGludCBrKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA+PSAwOyAtLWkpIHsgLy8gxJBhbmcgeMOpdCDEkWnhu4F1IGjDsmEgdGjhu6kgayAoY8OzIHRo4buDIGNo4buNbiAoaT0xKSBob+G6t2Mga2jDtG5nIGNo4buNbiAoaT0wKSkuCiAgICAgICAgaWYgKGkgPT0gMSkgeyAvLyBO4bq/dSBjaOG7jW4gxJFp4buBdSBow7JhIHRo4bupIGssCiAgICAgICAgICAgIGNvc3QgKz0gbVtrXTsgLy8gY+G7mW5nIHRow6ptIHbDoG8gY2hpIHBow60gaGnhu4duIHThuqFpIChjb3N0KSwKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGFba107IGogPD0gYltrXTsgKytqKSB7CiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZVtqXSAtPSBwW2tdOyAvLyBnaeG6o20gbmhp4buHdCDEkeG7mSBjw6FjIMO0IHTGsMahbmcg4bupbmcgbuG6v3UgY2jhu41uIMSRaeG7gXUgaMOyYSB0aOG7qSBrCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGsgPT0gTSkgeyAvLyBO4bq/dSDEkcOjIHjDqXQgxJHhur9uIMSRaeG7gXUgaMOyYSBjdeG7kWkgY8O5bmcgKG3hu5dpIMSRaeG7gXUgaMOyYSDEkeG7gXUgY8OzIHRy4bqhbmcgdGjDoWkgY2jhu41uIGhv4bq3YyBraMO0bmcgY2jhu41uKSB0aMOsIHRp4bq/biBow6BuaCBraeG7g20gdHJhIGPDoWNoIGNo4buNbiBoaeG7h24gdOG6oWkuCiAgICAgICAgICAgIGJvb2wgY2hlY2tpbmcgPSB0cnVlOyAvLyBLaeG7g20gdHJhIGPDoWMgY29uIGLDsiBjw7MgdGjhu49hIG3Do24gaGF5IGtow7RuZy4KICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gTjsgKytqKSB7CiAgICAgICAgICAgICAgICBib29sIHZhbGlkID0gdHJ1ZTsgLy8gS2nhu4NtIHRyYSBt4buNaSDDtCBj4bunYSBjb24gYsOyIHRo4bupIGogY8OzIHRo4buPYSBtw6NuIGhheSBraMO0bmcuCiAgICAgICAgICAgICAgICBmb3IgKGludCBsID0gc1tqXTsgbCA8PSB0W2pdOyArK2wpIHsgLy8gRHV54buHdCBxdWEgY8OhYyDDtCBj4bunYSBjb24gYsOyIHRo4bupIGouCiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBlcmF0dXJlW2xdID4gLWNbal0pIHsgLy8gTuG6v3UgdOG7k24gdOG6oWkgbeG7mXQgw7QgY2jGsGEgxJHhu6cgbcOhdCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsgLy8gdGjDrCBjb24gYsOyIGoga2jDtG5nIHRo4buPYSBtw6NuLAogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gdsOgIGzhuq1wIHThu6ljIGThu6tuZywga2jDtG5nIGPhuqduIGtp4buDbSB0cmEgY8OhYyDDtCBraMOhYyBj4bunYSBjb24gYsOyIG7DoHkuCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkgeyAvLyBO4bq/dSBjw7MgdOG7k24gdOG6oWkgbeG7mXQgY29uIGLDsiBraMO0bmcgdGjhu49hIG3Do24sCiAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcgPSBmYWxzZTsgLy8gdGjDrCBjw6FjaCBjaOG7jW4gxJFp4buBdSBow7JhIGhp4buHbiB04bqhaSBraMO0bmcgdGjhu49hIG3Do24sCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHbDoCBs4bqtcCB04bupYyBk4burbmcsIGtow7RuZyBj4bqnbiBraeG7g20gdHJhIGPDoWMgY29uIGLDsiBraMOhYwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGVja2luZykgeyAvLyBO4bq/dSBjw6FjaCBjaOG7jW4gxJFp4buBdSBow7JhIG7DoHkgdGjhu49hIG3Do24gdG/DoG4gYuG7mSBjw6FjIGNvbiBiw7IsCiAgICAgICAgICAgICAgICBhbnMgPSBtaW4oYW5zLCBjb3N0KTsgLy8gdGjDrCBj4bqtcCBuaOG6rXQgxJHDoXAgw6FuLgogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsgLy8gTuG6v3UgxJFp4buBdSBow7JhIMSRYW5nIHjDqXQgY2jGsGEgcGjhuqNpIMSRaeG7gXUgaMOyYSBjdeG7kWkgY8O5bmcsCiAgICAgICAgICAgIFRyeShrICsgMSk7IC8vIHRow6wgeMOpdCB0aeG6v3AgxJFp4buBdSBow7JhIGsrMS4KICAgICAgICB9CiAgICAgICAgaWYgKGkgPT0gMSkgeyAvLyBO4bq/dSBsw7pjIG7Do3kgY8OzIGNo4buNbiDEkWnhu4F1IGjDsmEgdGjhu6kgaywgdGjDrCBwaOG6o2kgdHLhuqMgbOG6oWkgdHLhuqFuZyB0aMOhaSBiYW4gxJHhuqd1IHRyxrDhu5tjIGtoaSBjaOG7jW4gxJFp4buBdSBow7JhIHRo4bupIGsuCiAgICAgICAgICAgIGNvc3QgLT0gbVtrXTsgLy8gTMO6YyBuw6N5IGPDsyBj4buZbmcgY2hpIHBow60gdsOgbyBu4bq/dSBjaOG7jW4gxJFp4buBdSBow7JhIHRo4bupIGssIHRow6wgYsOieSBnaeG7nSBwaOG6o2kgdHLhu6sgxJFpLgogICAgICAgICAgICBmb3IgKGludCBqID0gYVtrXTsgaiA8PSBiW2tdOyArK2opIHsKICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlW2pdICs9IHBba107IC8vIEzDumMgbsOjeSBjw7MgdHLhu6sgbmhp4buHdCDEkeG7mSBu4bq/dSBjaOG7jW4gxJFp4buBdSBow7JhIHRo4bupIGssIHRow6wgYsOieSBnaeG7nSBwaOG6o2kgY+G7mW5nIGzDqm4uCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgU29sdmUoKSB7CiAgICAvLyBOaOG6rXAgZOG7ryBsaeG7h3UKICAgIGNpbiA+PiBOID4+IE07CiAgICBzLnJlc2l6ZShOICsgMSksIHQucmVzaXplKE4gKyAxKSwgYy5yZXNpemUoTiArIDEpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgKytpKSB7CiAgICAgICAgY2luID4+IHNbaV0gPj4gdFtpXSA+PiBjW2ldOwogICAgfQogICAgYS5yZXNpemUoTSArIDEpLCBiLnJlc2l6ZShNICsgMSksIHAucmVzaXplKE0gKyAxKSwgbS5yZXNpemUoTSArIDEpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTTsgKytpKSB7CiAgICAgICAgY2luID4+IGFbaV0gPj4gYltpXSA+PiBwW2ldID4+IG1baV07CiAgICB9CiAgICB0ZW1wZXJhdHVyZS5hc3NpZ24oMTAxLCAwKTsgLy8gQmFuIMSR4bqndSBuaGnhu4d0IMSR4buZIGPhu6dhIDEwMCDDtCBi4bqxbmcgMC4KICAgIGFucyA9IDFlOTsgLy8gbMawdSBr4bq/dCBxdeG6oyAoYW5zd2VyKQogICAgVHJ5KDEpOyAvLyDEkOG7hyBxdXkgxJHhu4MgeMOpdCB0b8OgbiBi4buZIGPDoWMgY8OhY2ggY2jhu41uIMSRaeG7gXUgaMOyYSAobeG7l2kgxJFp4buBdSBow7JhIHThu6sgdGjhu6kgMSDEkeG6v24gdGjhu6kgTSBwaOG6o2kgY8OzIG3hu5l0IHRyb25nIGhhaSB0cuG6oW5nIHRow6FpOiBjaOG7jW4gaG/hurdjIGtow7RuZyBjaOG7jW4pLgogICAgY291dCA8PCBhbnM7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2UgOjogc3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oInRlc3QuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oInRlc3QuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigidGVzdC5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBTb2x2ZSgpOwp9