UVA_10105
组合题,用了一下LRJ书上递推计算组合数的方式。
#include<stdio.h>
#include<string.h>
#define MAXD 20
int N, K;
long long int C(int m, int n)
{
int i;
long long int ans = 1;
if(n - m < m)
m = n - m;
for(i = 1; i <= m; i ++)
ans = ans * (n - i + 1) / i;
return ans;
}
void solve()
{
int i, j, k, n;
long long int res = 1;
n = N;
for(i = 1; i <= K; i ++)
{
scanf("%d", &k);
res *= C(k, n);
n -= k;
}
printf("%lld\n", res);
}
int main()
{
while(scanf("%d%d", &N, &K) == 2)
{
solve();
}
return 0;
}