HDU 1521 排列組合
阿新 • • 發佈:2017-12-24
pro long sizeof strong += sin string space pre Problem Description
有n種物品,並且知道每種物品的數量。要求從中選出m件物品的排列數。例如有兩種物品A,B,並且數量都是1,從中選2件物品,則排列有"AB","BA"兩種。
Input
每組輸入數據有兩行,第一行是二個數n,m(1<=m,n<=10),表示物品數,第二行有n個數,分別表示這n件物品的數量。
Output
對應每組數據輸出排列數。(任何運算不會超出2^31的範圍)
Sample Input
2 2 1 1
Sample Output
2
指數型母函數模板題
1 #include<iostream> 2#include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 double a[12],b[12]; 8 long long fac[12]; 9 int d[12],n,m; 10 int main() 11 {int i,j,k; 12 while (cin>>n>>m) 13 { 14 memset(a,0,sizeof(a));15 memset(b,0,sizeof(b)); 16 for (i=1;i<=n;i++) 17 scanf("%d",&d[i]); 18 fac[0]=1; 19 for (i=1;i<=10;i++) 20 fac[i]=fac[i-1]*i; 21 a[0]=1; 22 for (i=1;i<=n;i++) 23 { 24 memset(b,0,sizeof(b)); 25 for (j=0;j<=d[i];j++) 26 { 27for (k=0;k<=m-j;k++) 28 b[k+j]+=a[k]/(double)fac[j]; 29 } 30 memcpy(a,b,sizeof(b)); 31 } 32 printf("%.0lf\n",a[m]*fac[m]); 33 } 34 }
HDU 1521 排列組合