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) 

原文地址:https://www.cnblogs.com/hxsyl/p/2498669.html