猫和老鼠玩象棋,玩了M+N局,猫赢了M局 老鼠赢了N局 N>M,而且在整个过程中,猫的得分从来没有超过过老鼠,问共有多少种可能的比赛得分过程
思路是博弈树,向右遍历表示老鼠赢了,向左遍历表示猫赢了,遍历这颗树,当然从根节点出发,不需要遍历左子树。
算法懒得写了!
#include<stdio.h>
int c;
void fun(int l,int r,int i,int m,int n)
{
if(i==0)
{
fun(l,r+1,i+1,m,n);
return;
}
else
{
if(i>m+n) return;
if(l==r) return;
else if(l>=r) return;
if(l==m&&r==n)
{
c++;
return;
}
fun(l,r+1,i+1,m,n);
fun(l+1,r,i+1,m,n);
}
}
void main()
{
fun(0,0,0,2,7);
printf("%d",c);
}