开始时竟然用了分情况讨论。
仔细思考一下,哈哈,发现不过是多重集合的组合数而已。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef __int64 u_int; u_int myc(u_int n,u_int r){ u_int sum=1; for(u_int i=1;i<=r;i++) sum=sum*(n+1-i)/i; return sum; } int main(){ u_int n,m; while(scanf("%I64d%I64d",&n,&m),m||n){ if(n>m){ u_int tmp=m; m=n; n=tmp; } u_int s=m+n; u_int t=s%2?s/2+1:s/2; n=n>t?s-t:n; u_int sum=myc(s,n); printf("%I64d ",sum); } return 0; }