對於dp[ i ][ j ] , 設 i 的二進制中 1 的個數為 Si。
則dp[ i ][ j ]表示在前Si行中,選取 i 的二進制對應的列所能得到分數 j 的方案數。
則遞推方程為:
dp[ t ][ k ] += dp[ i ][ j ] , Si +1 == St && (t 的二進制與 i 的二進制有且只有一位不一樣,換言之,只能在Sl行選取未在前 Si 行選取的一個列)。
最後 dp[1<<(n-1)][m]即為可行方案總數,而總的方案數為 n!。
又因此為01分布,所以期望為 dp[1<<(n-1)][m]/(n!),求出最大公約數化簡即可。
#include
#include
#include
#include
#include
#include
#include
#include
#include