原:
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < 1 << n; j++)
for (const int &k : s[i + 1]) {
if ((j >> k) & 1) continue;
(f[i + 1][j | (1 << k)] += f[i][j]) %= MOD;
}
后:
for (int i = 0; i < n - 1; i++)
for (const int &k : s[i + 1])
for (int j = 0; j < 1 << n; j++) {
if ((j >> k) & 1) continue;
int &x = f[i + 1][j | (1 << k)];
x += f[i][j];
if (x >= MOD) x -= MOD;
}
小小的常数优化罢了 :D