1 条题解
-
1
DP暴力枚举永远的神~#include<bits/stdc++.h> #define full(i) ((1<<i)-1) #define msk(i) (1<<i-1) #define rep(i,a,b) for(register int i=(a);i<=(b);i++) using namespace std; const int N=5e4+9,S=66; int n,c,w[N][S],f[N][S],ans; void pr(int s) { rep(i,1,5) cout<<(bool)(s&msk(i)); } int main() { scanf("%d%d",&n,&c); rep(i,1,c) { int e,f,l; scanf("%d%d%d",&e,&f,&l); int fears=0,likes=0; rep(j,1,f) { int x; scanf("%d",&x); x-=e; x++; if(x<0) x+=n; fears|=msk(x); } rep(j,1,l) { int x; scanf("%d",&x); x-=e; x++; if(x<0) x+=n; likes|=msk(x); } rep(s,0,full(5)) w[e][s]+=((~s)&fears||s&likes); } rep(t,0,full(5)) { memset(f,128,sizeof(f)); f[0][t]=0; rep(i,1,n) rep(s,0,full(5)) f[i][s]=max(f[i-1][(s&15)<<1],f[i-1][((s&15)<<1)|1])+w[i][s]; ans=max(ans,f[n][t]); } printf("%d",ans); return 0; }
- 1
信息
- ID
- 489
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 11
- 已通过
- 4
- 上传者