思路一:简单dfs,与李白打酒一样的做法.
#include<stdio.h>
int m,n,ars;
void f(int a,int b,int sum)
{
if(a>m||b>n||sum<0)
return ;
if(a==m&&b==n)
ars++;
f(a+1,b,sum+1);
f(a,b+1,sum-1);
}
int main(void)
{
scanf("%d%d",&m,&n);
f(0,0,0);
printf("%d",ars);
return 0;
}
dp[i][0]=1;
dp[i][j]=dp[i][j-1]+dp[i-1] [j] (i>=j)
否则为0.
dp[i][j] 表示 i 个还鞋和 j 个租鞋的时候排队的种类数
#include <iostream>
typedef long long ll;
using namespace std;
int f(int m,int n)
{
if(m < n)
return 0;
if(n == 0)
return 1;
return f(m-1,n) + f(m,n-1);
}
int main()
{
int m,n;
while(scanf("%d%d",&m,&n) != EOF)
{
int sum = f(m,n);
printf("%d\n",sum);
}
return 0;
}