Two Arrays

Two Arrays

Two Arrays 题目链接

思路

我们可以把两个序列链接起来,有 (a_1 <= a_2 …… <= a_n <= b_1 <= b_2 …… <= b_n)

这里就构成了一个非递减的序列,长度是 (2m) 我们定义数组 (dp[i][j]) 表示的是第i位是j的数量,显然有

(dp[i][j] = sum limits ^{j} _{k = 1} dp[i - 1][k]),再通过观察我们可以优化一下(dp[i][j] = dp[i - 1][j] + dp[i][j - 1])

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;

int dp[30][1010], n, m;
int main() {
    scanf("%d %d", &n, &m);
    m <<= 1;
    for(int i = 1; i <= n; i++) dp[1][i] = 1;
    for(int i = 2; i <= m; i++) 
        for(int j = 1; j <= n; j++)
            dp[i][j] = (dp[i][j - 1] + dp[i - 1][j]) % mod;
    ll ans = 0;
    for(int i = 1; i <= n; i++)
        ans = (ans + dp[m][i]) % mod;
    printf("%lld
", ans);
    return 0;
}
原文地址:https://www.cnblogs.com/lifehappiness/p/12822817.html