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;
}
posted @   RioTian  阅读(327)  评论(1编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
点击右上角即可分享
微信分享提示