#include #include #include #include #include #include #include #include #include #include using namespace std; int bit_count(int x){ int ret = 0; while(x>0){ ret++; x -= x & -x; } return ret; } double dfs(vector>> &dp, const int &n, const int &a, const int &b, int s, int t, int w){ if(w<0) return 0.0; if(dp[s][t][w] >= 0) return dp[s][t][w]; if(s==a){ if(w==0) return 1.0; else return 0.0; } double ret = 0; double p = 1.0/(bit_count(s)+1); for(int i=0; i<2*n; i++){ if( ((1< 0 ) continue; for(int j=0; j<2*n; j++){ if( ((1< 0 ) continue; if(i>j){ ret += dfs(dp, n, a,b,s^(1<> n; vector a(n); vector b(n); for(int i=0; i> a[i]; a[i]--; } for(int i=0; i> b[i]; b[i]--; } vector>> dp(1<<(2*n), vector>(1<<(2*n), vector(n+1, -1))); int s = 0; int t = 0; for(int i=0; i