题目大意:给出两个数n和m,构造两个数列,满足:
1.数列a单调不递减,b数列单调不递增
2.ai>=bi
3.长度都要为m
这里我们拆解一下条件,根据第一条和第二条,保证了am<=bm,然后把这两个数列粘贴在一起,就可以形成了一个单调非递减的数列,长度为2*m,用dp[i][j] = dp[i-1][j]+dp[i][j+1] 来统计情况。
#include<bits/stdc++.h>
using namespace std;
const int maxx = 1050;
const int mod = 1e9+7;
long long dp[maxx<<1][25];
int n,m;
int main ()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
dp[1][i] = 1;
}
for(int i=2;i<=2*m;i++){
for(int j=n;j>0;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[2*m][i])%mod;
}
cout<<ans<<endl;
return 0;
}