那
1 <3 <4 2< 5 为例 ,插入数字6时,能使小于号增加1或者不增加,其中增加1的方法在于把6放在末尾,与大于号位置,共有两个,不增加时,放在头部,与小于号位置即可。‘
也就是说dp[i][j]由两种状态转移,一种是借助上一数字,dp[i-1][j],我们将本个数字插入头部1种,插入小于号位置,j种。即 dp[i][j]=(dp[i][j]+dp[i-1][j]*(j+1))%mod;
另一种是,插入尾部或者大于号位置, dp[i][j]=(dp[i][j]+dp[i-1][j-1]*(i-j))%mod;
# include<iostream>
# include<algorithm>
# define mod 2015
using namespace std;
int dp[1010][1010];
int main ()
{
dp[1][0]=1;
dp[2][0]=1;
dp[2][1]=1;
int n;
int k;
cin>>n>>k;
for(int i=3;i<=n;i++)
{
dp[i][0]=1;
dp[i][i-1]=1;
for(int j=1;j<i-1;j++)
{
dp[i][j]=(dp[i][j]+dp[i-1][j-1]*(i-j))%mod;
dp[i][j]=(dp[i][j]+dp[i-1][j]*(j+1))%mod;
}
//dp[i][i-1]=1;
}
cout<<dp[n][k];
return 0;
}