链接:https://ac.nowcoder.com/acm/contest/881/E
来源:牛客网
题目描述
Bobo has a string of length 2(n + m) which consists of characters A
and B
. The string also has a fascinating property: it can be decomposed into (n + m) subsequences of length 2, and among the (n + m) subsequences n of them are AB
while other m of them are BA
.
Given n and m, find the number of possible strings modulo 1e9+7
输入描述:
The input consists of several test cases and is terminated by end-of-file.
Each test case contains two integers n and m.
输出描述:
For each test case, print an integer which denotes the result.
Input Sample
1 2
1000 1000
0 0
输出
13
436240410
1
Solution
AC Code:
/*
* Copyright (c) 2019 Ng Kimbing, HNU, All rights reserved. May not be used, modified, or copied without permission.
* @Author: Ng Kimbing, HNU.
* @LastModified:2019-07-19 T 21:20:54.988 +08:00
*/
package NowCoder;
import java.util.Arrays;
import static ACMProblems.ACMIO.*;
public class ABBA {
private static final int MOD = 1000000000 + 7;
private static final int maxN = 2 * 1000 + 5;
public static void main(String[] args) {
int n, m;
int[][] dp = new int[maxN][maxN];
while (true) {
try {
n = nextInt();
m = nextInt();
for (int i = 0; i <= n + m; i++)
Arrays.fill(dp[i], 0);
dp[0][0] = 1;
for (int i = 0; i <= n + m; i++) {
for (int j = 0; j <= n + m; j++) {
//If i, j represents a valid condition
if (i < n || (i - n) < Math.min(m, j))
dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % MOD;
if (j < m || (j - m) < Math.min(n, i))
dp[i][j + 1] = (dp[i][j + 1] + dp[i][j]) % MOD;
}
}
out.println(dp[n + m][n + m]);
// out.flush();
} catch (Exception e) {
out.flush();
break;
}
}
out.flush();
}
}