Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52331 | 野兽先辈——田所浩二 | 子网 | C++ | 运行出错 | 20 | 15 MS | 18276 KB | 729 | 2022-07-19 11:53:25 |
#include<cstdio> #include<iostream> using namespace std; const int N=8005,M=4405; int n,m,k[M],c[N][M],ans; int dp[M][1<<15]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d",&k[i]); for(int j=1;j<=k[i];j++) scanf("%d",&c[i][j]),c[i][j]--; } for(int i=1;i<=m;i++) for(int s=0;s<(1<<n);s++) { dp[i][s]=max(dp[i][s],dp[i-1][s]); for(int j=1;j<=k[i];j++) { if(s&(1<<c[i][j])) continue; for(int l=j+1;l<=k[i];l++) { if(s&(1<<c[i][l])) continue; dp[i][s|(1<<c[i][j])|(1<<c[i][l])]=max(dp[i][s|(1<<c[i][j])|(1<<c[i][l])],dp[i-1][s]+1); } } } for(int i=0;i<(1<<n);i++) ans=max(ans,dp[m][i]); printf("%d",ans); return 0; }