没想到啊……我以为正解是子集求和…… 因为看 时, ,那么看 时, 。然后就变成了简短的代码 int n = readint(), m = readint(); for(int i=1,x; i<=n; ++i){ x = (1<<MaxN)-1-readint(); ++ dp[x]; } for(int i=0; i<MaxN; ++i) for(int j=0; j<(1<<MaxN); ++j) if(j>>i&1) ...