poj2249 Binomial Showdown(二项式系数)
2017-03-16 21:59
375 查看
http://poj.org/problem?id=2249
题意:求组合数C(n,k),最后的结果超大可能是2^31。
思路:刚开始本来想把前些日子的dp法复习下,结果RE。2^31至少要开10000*10000的二维数组,行不通。。
后来就想,其实这题有个很简单的方法,很久以前也碰到过类似的问题。
C(n,k) = n!/(k!*(n-k)!)。我们知道n!有n项,k!有k项,(n-k)!有n-k项。分子分母都有n项啊!为了统一我们把(n-k)!约掉,分子分母只剩k项了啊,一个for搞定。
同时乘一个数再除一个数保证不会太大溢出,记得转化成double。
。。。
于是就陷入无限WA,不要用G++。。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 2005;
const int INF = 0x3f3f3f3f;
int main()
{
// freopen("in.txt", "r", stdin);
int n, k;
double ans;
while(~scanf("%d%d", &n, &k))
{
if(n==0 && k==0) break;
if(k > n-k) k = n-k;
if(k == 0)
{
printf("1\n");
continue;
}
ans = 1;
for(int i = 0; i < k; i++)
{
ans*=((double)(n-i)/(double)(k-i));
}
printf("%.0lf\n", ans);
}
return 0;
}
题意:求组合数C(n,k),最后的结果超大可能是2^31。
思路:刚开始本来想把前些日子的dp法复习下,结果RE。2^31至少要开10000*10000的二维数组,行不通。。
后来就想,其实这题有个很简单的方法,很久以前也碰到过类似的问题。
C(n,k) = n!/(k!*(n-k)!)。我们知道n!有n项,k!有k项,(n-k)!有n-k项。分子分母都有n项啊!为了统一我们把(n-k)!约掉,分子分母只剩k项了啊,一个for搞定。
同时乘一个数再除一个数保证不会太大溢出,记得转化成double。
。。。
于是就陷入无限WA,不要用G++。。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 2005;
const int INF = 0x3f3f3f3f;
int main()
{
// freopen("in.txt", "r", stdin);
int n, k;
double ans;
while(~scanf("%d%d", &n, &k))
{
if(n==0 && k==0) break;
if(k > n-k) k = n-k;
if(k == 0)
{
printf("1\n");
continue;
}
ans = 1;
for(int i = 0; i < k; i++)
{
ans*=((double)(n-i)/(double)(k-i));
}
printf("%.0lf\n", ans);
}
return 0;
}
相关文章推荐
- poj 2249 Binomial Showdown(组合数 公式优化)
- Poj 2249 Binomial Showdown
- POJ 2249-Binomial Showdown(排列组合计数)
- POJ2249 Binomial Showdown
- POJ 2249 Binomial Showdown(排列组合)
- POJ2249 Binomial Showdown
- poj 2249 Binomial Showdown
- POJ 2249 Binomial Showdown (连乘整商求组合数)
- POJ - 2249 - Binomial Showdown - (组合数)
- poj 2249 Binomial Showdown
- POJ 2249 Binomial Showdown 求组合数C(n,k)
- (组合数学3.1.2.1)POJ 2249 Binomial Showdown(排列组合公式的实现)
- POJ 题目2249 Binomial Showdown(数学)
- POJ 2249 Binomial Showdown 求组合数C(n,k)
- ZOJ 1938 Binomial &&poj 2249 (Binomial Showdown )(睡前一水)
- poj 2249 Binomial Showdown
- poj 2249 Binomial Showdown[C(n, m)组合数求解]
- (组合数学3.1.2.1)POJ 2249 Binomial Showdown(排列组合公式的实现)
- poj 2249 Binomial Showdown
- poj2249 Binomial Showdown 求组合数