UVA 11076

题目链接

脑子抽了,看错题了,神奇的看成没有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 }

原文地址:https://www.cnblogs.com/naix-x/p/3381416.html