Untitled
int n, a[20], b[20], dis_a[20], dis_b[20]; ll dp[mu2(20)]; int tmp[20]; void nhap() { cin >> n; } void solve() { nhap(); FOR(i, 0, n) { cin >> a[i]; dis_a[a[i] - 1] = i; } FOR(i, 0, n) { cin >> b[i]; dis_b[b[i] - 1] = i; } mem(tmp, 0); FOR(i, 0, n) { FOR(j, 0, n) { if (i != j && dis_a[i] < dis_a[j] && dis_b[i] < dis_b[j]) { tmp[j] |= mu2(i); } } } dp[0] = 1; FOR(mask, 0, mu2(n)) { FOR(x, 0, n) { if((mask & mu2(x)) == 0) { if((mask & tmp[x]) == tmp[x]) { dp[mask | mu2(x)] += dp[mask]; } } } } cout << dp[mu2(n) - 1]; }
Leave a Comment