3 条题解

  • 0
    @ 2024-6-3 17:30:04

    状态压缩枚举

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=2e1+5,maxm=1e1+5;
    int N,M;
    int s[maxn],t[maxn],c[maxn];
    int a[maxm],b[maxm],p[maxm],m[maxm];
    int f[1000],cd[1000];//fi为第i个巢穴收到的攻击 
    bool check(){
    	for(int i=1;i<=100;i++) if(f[i]<cd[i]) return false;
    	return true;
    }
    int main(){
    	cin >> N >> M;
    	for(int i=0;i<N;i++){
    		cin >> s[i] >> t[i] >> c[i];
    		for(int k=s[i];k<=t[i];k++) cd[k]=c[i];
    	} 
    	int ans=0x3f3f3f3f;
    	for(int i=0;i<M;i++) cin >> a[i] >> b[i] >> p[i] >> m[i];
    	for(int pt=0;pt<(1<<(M));pt++){
    		memset(f,0,sizeof(f));//清空 
    		int sum=0;
    		for(int i=0;i<M;i++){
    			if(pt&(1<<i)){//有选i 
    				sum+=m[i];
    				for(int k=a[i];k<=b[i];k++) f[k]+=p[i];
    			}
    			if(check()) ans=min(ans,sum);
    		}
    	}
    	cout << ans << endl;
    	return 0;
    }
    

    信息

    ID
    3147
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    190
    已通过
    40
    上传者