# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
140995 | 2019-08-06T10:32:32 Z | Shelby | 아름다운 순열 (IZhO12_beauty) | C++11 | 8 ms | 504 KB |
#include <bits/stdc++.h> using namespace std; int dp[20][1<<20],t[20],b[20],a[20]; bool v[20][20]; int main() { int n,i,j,x,tmp,mask,sol=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=__builtin_popcount(a[i]); x=a[i]; while(x>0) { tmp=x%3; if(tmp==1) t[i]++; x=x/3; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if((b[i]==b[j] || t[i]==t[j]) && i!=j) v[i][j]=true; } } for(i=0;i<n;i++) dp[(1<<i)][i]=1; for(mask=0;mask<(1<<n);mask++) { for(i=0;i<n;i++) { if(mask&(1<<i)) { for(j=0;j<n;j++) { if( (mask&(1<<j))==0 && v[i][j]==true ) { dp[mask|(1<<j)][j]+=dp[mask][i]; } } } } } for(i=0;i<n;i++) sol+=dp[(1<<n)-1][i]; printf("%d\n",sol); //for(i=0;i<n;i++) cout << b[i] << " " << t[i] << endl; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 376 KB | Output is correct |
3 | Correct | 2 ms | 376 KB | Output is correct |
4 | Correct | 2 ms | 376 KB | Output is correct |
5 | Correct | 2 ms | 376 KB | Output is correct |
6 | Runtime error | 8 ms | 504 KB | Execution killed with signal 11 (could be triggered by violating memory limits) |
7 | Halted | 0 ms | 0 KB | - |