1 #define HAVE_STRUCT_TIMESPEC
2 #include<bits/stdc++.h>
3 using namespace std;
4 const long long mod = 1e9+7;
5 long long pre[1007][1007],temp[1007][1007];
6 int main(){
7 ios::sync_with_stdio(false);
8 cin.tie(NULL);
9 cout.tie(NULL);
10 int n,m;
11 cin>>n>>m;
12 for(int i=1;i<=n;++i){
13 pre[1][i]=1;
14 temp[1][i]=1;
15 }
16 for(int i=2;i<=m;++i)//当前位
17 for(int j=1;j<=n;++j)//第i位以数字j结尾
18 for(int k=1;k<=j;++k)//保证非降序
19 pre[i][j]=(pre[i][j]+pre[i-1][k])%mod;//状态转移
20 for(int i=2;i<=m;++i)//当前位
21 for(int j=1;j<=n;++j)//第i位以数字j结尾
22 for(int k=j;k<=n;++k)//保证非升序
23 temp[i][j]=(temp[i][j]+temp[i-1][k])%mod;//状态转移
24 long long ans=0;
25 for(int i=1;i<=n;++i)//枚举第二个数组以数字i作为结尾
26 for(int j=1;j<=i;++j)//枚举第一个数组以数字j作为结尾,j<=i保证了第一个数组最大的都小于等于第二个数组最小的,所以整个数组全部满足小于等于关系
27 ans=(ans+(temp[m][i]*pre[m][j])%mod)%mod;//相乘得到答案
28 cout<<ans;
29 return 0;
30 }
来源:https://www.cnblogs.com/ldudxy/p/12196064.html