动态规划题,状态转移方程为 dp[i][j] = dp[i-1][j] + dp[i][j-1] (i >= j),表示前 i+j 个位置有 i 个 H 和 j 个 D,满足要求的组合数。
#include <cstdio>
#include <cstring>
const int MAXN = 25;
__int64 dp[MAXN][MAXN];
int main()
{
for (int i = 1; i <= 20; i++) //动态规划
{
for (int j = 1; j <= i; j++)
if (j == 1)
dp[i][j] = i;
else
dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
}
int m, n;
while (scanf("%d%d", &m, &n) == 2)
{
printf("%I64d\n", dp[m][n]);
}
return 0;
}
继续加油。