AcWing 4889. 空调II 最最简单的一集(dfs)
原题链接
简单
作者:
yuehua
,
2025-04-05 18:16:22
· 山东
,
所有人可见
,
阅读 4
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int s[N], t[N], c[N];
int a[N], b[N], p[N], m[N];
int d[N], r[N];
int n, M;
int res = 1e6;
void dfs(int u, int sum) {
if (sum >= res) return;
bool success = true;
for (int j = 0; j < N; j++)
{
if (d[j] < r[j])
{
success = false;
break;
}
}
if (success)
{
res = min(res, sum);
return;
}
if (u == M) return;
dfs(u + 1, sum);
for (int j = a[u]; j <= b[u]; j++)
d[j] += p[u];
dfs(u + 1, sum + m[u]);
for (int j = a[u]; j <= b[u]; j++)
d[j] -= p[u];
}
int main() {
cin >> n >> M;
for (int i = 0; i < n; i++) {
cin >> s[i] >> t[i] >> c[i];
for (int j = s[i]; j <= t[i]; j++) {
r[j] += c[i];
}
}
for (int i = 0; i < M; i++) {
cin >> a[i] >> b[i] >> p[i] >> m[i];
}
dfs(0, 0);
cout << res << endl;
return 0;
}