3 条题解
-
0
二进制枚举即可
#include <bits/stdc++.h> using namespace std; int n, m; int mp[200005], st[200005]; int minn = INT_MAX, maxn; int a[15], b[15], c[25], p[15], q[15]; int main() { cin >> n >> m; for(register int i = 1; i <= n; i++){ int s, t; cin >> s >> t >> c[i]; maxn = max(maxn, t); for(register int j = s; j <= t; j++) mp[j] = st[j] = c[i];//标记 } for(register int i = 1; i <= m; i++) cin >> a[i] >> b[i] >> p[i] >> q[i]; for(register int i = 0; i <= (1 << m); i++){ int cost = 0; int j = i, t = 0; while(j){//二进制枚举 t++; if(j & 1){//买了第t个火炮 cost += q[t]; for(register int l = a[t]; l <= b[t]; l++) mp[l] -= p[t]; } j >>= 1; } bool flag = 1; for(register int k = 1; k <= maxn; k++){ if(mp[k] > 0) flag = 0; } if(flag) minn = min(minn, cost); for(register int k = 1; k <= maxn; k++) mp[k] = st[k]; } cout << minn; return 0; }
信息
- ID
- 3147
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 190
- 已通过
- 40
- 上传者