Divide and Count
排列组合,
重复的要除 < 个数的阶乘 >
3
2 , 2, 2 要除以 3!
#include<bits/stdc++.h>
using namespace std;
int a[20],b[20];
int zuhe(int d,int s)
{
int hui=1;
for(int i=d;i>=d-s+1;i--) hui*=i;
for( int i=s;i>=1;i--) hui/=i;
return hui;
}
int jie(int k)
{
int oo=1;
for(int i=1;i<=k;i++)
oo*=i;
return oo;
}
int main()
{
int n;
while( cin>>n)
{
int ma=0;
int sum=0;
memset(b,0,sizeof b);
for(int i=0;i<n;i++){
cin>>a[i];
b[a[i]]++;
ma=max(ma,a[i]);
sum+=a[i];
}
int zong=1;
for(int i=0;i<n;i++)
{
zong*=zuhe( sum,a[i]);
sum-=a[i];
}
for(int i=0;i<=ma;i++)
{
if(b[i]>=2 ) {zong/= jie(b[i]) ;}
}
cout<<zong<<endl;
}
return 0;
}