orz想了好久好久的排列组合,未果,考虑不全……DP好难啊233333
抛开整体不考虑,我们来考虑一下只有3个人的局部问题:
只要第i-1个人比i矮(高)第i+1个人比i矮(高),i当前位置就是满足题意的
设f[i][j]为排列的第i位为j,而且i-1位比j小
设g[i][j]为排列的第i位位j,而且i-1位比j大
emmmmm明天补
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAX= 13e5; int t,n,m; ll dp[25][25]; ll ans[25]; void init() { memset(ans,0,sizeof(ans)); dp[1][1]=1; ans[1]=1; for(int i=2;i<25;i++) for(int j=2;j<=i;j++) { dp[i][j]=dp[i-1][i-j+1]+dp[i][j-1]; ans[i]+=dp[i][j]*2; } } int main() { cin>>t; init(); while(t--) { cin>>n>>m; cout<<n<<" "<<ans[m]<<endl; } return 0; }