1 条题解

  • 1
    @ 2026-5-7 21:39:28

    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
    上传者