OJ题目:click here~~
题目分析:能够称为Abor有两个条件:1,必须是male , 2,必须有不少于m个的female朋友。A[ i ][ j ]表示i 与 j 是朋友 , i , j可能是male , 也可能是female ,等可能的。求n个person中,Abor的期望个数。
Abor的期望个数 = 1 * 第一个person是Abor的概率 + 1*第二个person是Abor 的概率 + ……
所以一个个算概率 , 再相加。
AC_CODE
typedef long long LL ;
const int MAX_N = 22 ;
LL C(int a , int b){
if(b - a < a) a = b - a ;
LL u = 1, d = 1;
int aa = a , bb = b ;
while(a){
a-- ;
u *= bb ;
bb-- ;
d *= aa ;
aa-- ;
}
return u/d ;
}
int main(){
int n , m , i , j , k , f , t ;
int x[MAX_N][MAX_N] ;
double pro = 0 ;
string s ;
double POW[MAX_N] ;
POW[0] = 1 ;
for(i = 1;i < MAX_N;i++)
POW[i] = POW[i - 1]*0.5 ;
cin >> t ;
while(t--){
scanf("%d%d",&n,&m) ;
pro = 0 ;
for(i = 0;i < n;i++){
cin >> s ;
f = 0 ;
for(j = 0;j < n;j++)
if(s[j] == '1') f++ ;
if(f < m) continue ;
for(j = m;j <= f;j++){
pro += C(j , f)*POW[f + 1] ;
}
}
printf("%.2lf\n" , pro) ;
}
return 0 ;
}