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)
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.