Educational Codeforces Round 80 (Rated for Div. 2)C(DP)
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 }
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)