0pts二进制枚举
查看原帖
0pts二进制枚举
1013479
lyx128楼主2024/8/13 16:02
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5;
const int oo=2e9;
int n,m;
int bit;
int a[N+5],b[N+5],p[N+5],d[N+5];
int s,t,c;
int maxn[N+5];
int used[N+5];
int ans=oo;
void mk(int l,int r,int c){
	for(int i=l;i<=r;i++)
		maxn[i]=max(maxn[i],c);
	return ;
}
bool check(){
	memset(used,0,sizeof(used));
	int res=0;
	for(int i=0;i<m;i++){
		if(bit&(1<<i))
			for(int j=a[i];j<=b[i];j++)
				used[j]+=p[i];
		res+=d[i];
	}
	for(int i=1;i<=100;i++)
		if(used[i]<maxn[i])
			return -1;
	return res;
} 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s>>t>>c;
		mk(s,t,c);
	}
	for(int i=1;i<=m;i++)
		cin>>a[i]>>b[i]>>p[i]>>d[i];
	bit=0;
	while(bit<=(1<<m)-1){
		int res=check();
		if(res!=-1)
			ans=min(ans,res);
		bit++;
	}
	cout<<ans;
	return 0;
}

2024/8/13 16:02
加载中...