Submission #339832

#TimeUsernameProblemLanguageResultExecution timeMemory
339832nandonathaniel아름다운 순열 (IZhO12_beauty)C++14
0 / 100
3092 ms164664 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=20; int n; long long dp[1<<MAXN][MAXN]; int a[MAXN]; int binary(int x){ return __builtin_popcount(x); } int ternary(int x){ int ret=0; while(x>0){ if(x%3==1)ret++; x/=3; } return ret; } long long DP(int mask,int last){ if(mask==((1<<n)-1))return 1; long long &ret=dp[mask][last]; if(ret!=-1)return ret; ret=0; for(int i=0;i<n;i++){ if(!(mask & (1<<i))){ if(binary(a[last])==binary(a[i]) || ternary(a[last])==ternary(a[i]))ret+=DP(mask+(1<<i),i); } } return ret; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n; for(int i=0;i<n;i++)cin >> a[i]; memset(dp,-1,sizeof(dp)); long long ans=0; for(int i=0;i<n;i++)ans+=DP(1<<i,i); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...