Pagini recente » Cod sursa (job #354463) | Cod sursa (job #2926339) | Cod sursa (job #2690424) | Cod sursa (job #609225) | Cod sursa (job #3236198)
#include <fstream>
std::ifstream in("invcs.in");
std::ofstream out("invcs.out");
int n;
int a[20];
int dp[1 << 20];
bool done[1 << 20];
int solve(int mask) {
if (done[mask]) {
return dp[mask];
}
dp[mask] = 0;
int maxi = 0;
for (int i = 0; i < n; i++) {
if ((mask >> i) & 1) {
if (a[i] == maxi + 1) {
dp[mask] += solve(mask ^ (1 << i));
}
maxi = std::max(maxi, a[i]);
}
}
done[mask] = true;
return dp[mask];
}
int main() {
in >> n;
for (int i = 0; i < n; i++) {
in >> a[i];
}
dp[0] = done[0] = 1;
out << solve((1 << n) - 1);
return 0;
}