题意:给m个H和n个D,从左开始数H的累积个数总是不比D的累计数少的排列有多少种。
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1267
思路:
递推公式:a[m][n] = a[m-1][n] + a[m][n-1];
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
int m,n;
long long a[22][22];
memset(a, 0 ,sizeof a);
for(int k=0; k<=20; k++)
a[k][0] = 1;
for(int i=1; i<=20; i++)
{
for(int j=i; j<=20; j++) //注意是从i开始,因为m的个数要大于n才行
{
a[j][i] = a[j-1][i] + a[j][i-1]; //注意是j在前面
}
}
while(scanf("%d%d",&m,&n) != EOF)
{
printf("%I64d\n",a[m][n]);
}
return 0;
}