• Codeforce 1288C. Two Arrays(DP组合数学,n个数选择m个数,单调不递减个数,排列组合打表N*N)


    https://codeforces.com/problemset/problem/1288/C

    Examples

    input

    2 2
    

    output

    5
    

    input

    10 1
    

    output

    55
    

    input

    723 9
    

    output

    157557417
    

    Note

    In the first test there are 5 suitable arrays:

    • a=[1,1],b=[2,2]
    • a=[1,2],b=[2,2]
    • a=[2,2],b=[2,2]
    • a=[1,1],b=[2,1]
    • a=[1,1],b=[1,1]

    题目大意:

    给定一个数n和一个数m,让构建两个数组a和b满足条件,

    1.数组中所有元素的取值在1~n之间,a和b数组长度是m。2. a数组是单调不递减的,b数组是单调不递增 3. 任意的位置i,有ai<=bi

    问你有多少对这样的数组

    思路:

    从n个数中任选m个数,这m个数从小到大排列,且可重复选取的方案数为C(n+m-1,m)

    转化为代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int mod = 1e9 + 7;
    const int maxn = 10001;
    int dp[21][1001];
    int main() {
    	//freopen("in.txt", "r", stdin);
    	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    	int n, m;
    	cin >> n >> m;
    	m *= 2;
    	dp[1][0] = 1;
    	for (int i = 1; i <= m; ++i)
    		for (int j = 1; j <= n; ++j)
    			dp[i][j] = (dp[i - 1][j] + dp[i][j - 1] ) % mod;
    	long long ans = 0;
    	for (int i = 1; i <= n; ++i)
    		ans = (ans + dp[m][i]) % mod;
    	cout << ans;
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    Bellman算法
    Codeforces Round #378 (Div. 2) D
    运算符优先级
    Kruskal算法
    Java 大数运算
    无根树转有根树
    欧拉函数模板
    HDU 4135 Co-prime(容斥原理)
    快速求n的质因子(数论)
    Markdown中插入数学公式
  • 原文地址:https://www.cnblogs.com/RioTian/p/13583624.html
Copyright © 2020-2023  润新知