[关闭]
@sensitive-cs 2016-10-06T04:47:01.000000Z 字数 619 阅读 717

K - The World is a Theatre

分析:

从n个男生中选至少4人,从m个女生中选至少1人,满足m和n的和为t,求多少种选法。

思路:

组合的简单问题。
满足上述条件的情况下,对每一种不同的情况,男生的组合数与女生的组合数相乘,最后相加。

特别注意:

参考了晴转多云同学的代码后,暴力算阶乘的绝对会溢出,所以算组合数的时候是有技巧的,具体技巧参考代码中的计算组合数的函数。当然long long是必须的。

代码:
  1. #include <stdio.h>
  2. long long bine(int max,int min);
  3. int main()
  4. {
  5. long long n,m,t;
  6. while (scanf("%I64d%I64d%I64d",&n,&m,&t) != EOF)
  7. {
  8. long long i,j;
  9. long long cal = 0;
  10. for (i = 4;i <= n;i++)
  11. for (j = 1;j <= m;j++)
  12. {
  13. if ((i + j) == t)
  14. {
  15. long long _x = 0,_y = 0;
  16. if (i == n)
  17. _x = 1;
  18. else
  19. _x = bine(n,i);
  20. if (j == m)
  21. _y = 1;
  22. else
  23. _y = bine(m,j);
  24. cal += (_x * _y);
  25. }
  26. }
  27. printf("%I64d\n",cal);
  28. }
  29. return 0;
  30. }
  31. long long bine(int max,int min)
  32. {
  33. int i,j;
  34. long long temp = 1;
  35. for (i = max,j = 1;j <= min;j++,i--)
  36. temp = temp * i / j;
  37. return temp;
  38. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注