2019牛客暑期多校训练营(第一场)E. ABBA

链接: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();
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值