脑子抽了,看错题了,神奇的看成没有0了。主要问题把n个数插入m个相同的数,把m个数给分成1-m堆,然后插到n+1空里。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cmath> 5 #include <ctime> 6 #include <cstdlib> 7 #include <iostream> 8 using namespace std; 9 #define MOD 1000000 10 #define LL long long 11 LL c[21][21]; 12 int p[21]; 13 int n; 14 LL judge() 15 { 16 LL ans = 1; 17 int i,j,pre = 0; 18 LL temp; 19 for(i = 0;i < 10;i ++) 20 { 21 if(p[i]) 22 { 23 temp = 0; 24 for(j = 1;j <= p[i];j ++) 25 { 26 temp += c[pre+1][j]*c[p[i]-1][j-1]; 27 } 28 ans *= temp; 29 pre += p[i]; 30 } 31 } 32 return ans; 33 } 34 int main() 35 { 36 int i,j,num; 37 LL ans,temp; 38 for(i = 0;i <= 20;i ++) 39 c[i][0] = 1; 40 for(i = 1;i <= 20;i ++) 41 { 42 for(j = 1;j <= 20;j ++) 43 c[i][j] = c[i-1][j-1] + c[i-1][j]; 44 } 45 while(cin>>n) 46 { 47 if(!n) break; 48 memset(p,0,sizeof(p)); 49 ans = 0; 50 for(i = 0;i < n;i ++) 51 { 52 cin>>num; 53 p[num] ++; 54 } 55 temp = 1; 56 for(i = 1;i < n;i ++) 57 { 58 temp = temp*10 + 1; 59 } 60 for(i = 0;i < 10;i ++) 61 { 62 if(p[i]) 63 { 64 p[i] -- ; 65 ans += i*temp*judge(); 66 p[i] ++; 67 } 68 } 69 cout<<ans<<endl; 70 } 71 return 0; 72 }