3 条题解
-
0
状态压缩枚举
#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
- 上传者