璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:usaco23jan_air_cownditioning_ii_b
problems
名称Air Cownditioning II B
题目编号USACO23JAN_B2
题目链接luogu.com.cn/…
来源USACO
算法分类DFS, DFS_枚举
难易程度容易

Air Cownditioning II B

想法

用DFS对空调进行子集枚举,每次枚举完进行判断,取最小值。

代码实现

#include<cstdio>
#include<cstring>
 
const int N = 30;
const int M = 20;
int s[N], t[N], c[N], m[M], a[M], b[M], p[M], line[110];
bool used[M];
int n, mm, ans = 0x7f7f7f7f;
 
void check() {
	memset(line, 0, sizeof(line));
	int temp = 0;
	for (int i = 1; i <= mm; ++i) {
		if(!used[i])continue;
		temp += m[i];
		for (int j = a[i]; j <= b[i]; ++j)
			line[j] += p[i];
	}
 
	for (int i = 1; i <= n; ++i)
		for (int j = s[i]; j <= t[i]; ++j) 
			if(line[j] < c[i])return ;
 
	if(temp < ans)
		ans = temp;
	return ;
}
 
void DFS(int x) {
	if(x > mm) {
		check();
		return ;
	}
	used[x] = true;
	DFS(x+1);
	used[x] = false;
	DFS(x+1);
	return ;
}
 
int main() {
	scanf("%d %d", &n, &mm);
	for (int i = 1; i <= n; ++i) 
		scanf("%d %d %d", &s[i], &t[i], &c[i]);
	for (int i = 1; i <= mm; ++i) {
		scanf("%d %d %d %d", &a[i], &b[i], &p[i], &m[i]);
	}
	DFS(1);
	printf("%d", ans);
	return 0;
}
/app/www/public/data/pages/icpc/problems/usaco23jan_air_cownditioning_ii_b.txt · 最后更改: 2023/05/23 10:35 由 温婕莺