NYOJ 459(可重复组合数)
//全部用long
#include<stdio.h>
long fun(int n,int m)
{
long long int a,b,ans=1;
a=n-m+1;
b=1;
while(a<=n&&b<=m)
{
ans=ans*a/b;
a++;
b++;
}
return ans;
}
int main()
{
long long int m,n,ans;
while(scanf("%lld%lld",&n,&m),m||n)
{
ans=fun(n+m-1,m);
printf("%lld\n",ans);
}
return 0;
}
//输入1 0,应输出0,而实际输出1,但一看题,说正整数
这个问题叫做:可重复组合数,与求方程x1+x2+x3+…+xm=n的非负整数解的组数是一类问题,方法有多种,结论有两种一种是递推的,一种是组合数,我只说下组合数的结论吧:C(n+m-1,m)
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号