关闭O2
开启O2
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=110;
int n,m,ans=LLONG_MAX,c[N];
struct node{
int l,r,p,v;
}a[N];
bool check(){
for(int i=1;i<=N;++i)
if(c[i]>0) return 0;
return 1;
}
void dfs(int cnt,int sum){
if(cnt>m){
if(check())
ans=min(ans,sum);
return ;
}
for(int i=a[cnt].l;i<=a[cnt].r;++i)
c[i]-=a[cnt].p;
dfs(cnt+1,sum+a[cnt].v);
for(int i=a[cnt].l;i<=a[cnt].r;++i)
c[i]+=a[cnt].p;
dfs(cnt+1,sum);
return ;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
int s,t,b;
cin>>s>>t>>b;
for(int j=s;j<=t;++j) c[j]+=b;
}
for(int i=1;i<=m;++i)
cin>>a[i].l>>a[i].r>>a[i].p>>a[i].v;
dfs(1,0);
cout<<ans;
return 0;
}