Untitled
unknown
plain_text
a year ago
878 B
6
Indexable
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];
}Editor is loading...
Leave a Comment