Permutation CountingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1519 Accepted Submission(s): 769
Problem Description
Given a permutation a1, a2, … aN of {1, 2, …, N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find how many permutations of {1, 2, …, N} whose E-value is exactly k.
Input
There are several test cases, and one line for each case, which contains two integers, N and k. (1 <= N <= 1000, 0 <= k <= N).
Output
Output one line for each case. For the answer may be quite huge, you need to output the answer module 1,000,000,007.
Sample Input
Sample Output
Source
2010 Asia Regional Harbin
|
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MOD 1000000007
using namespace std;
long long f[1010][1010];
void dabiao(){f[1][1]=1;f[2][1]=1;f[2][2]=1;f[3][1]=1;f[3][2]=4;f[3][3]=1;for(int i=4;i<1010;++i){f[i][1]=1;for(int j=2;j<=i;++j){f[i][j]=(f[i-1][j-1]*(i-j+1)%MOD+(f[i-1][j]*j)%MOD)%MOD;}}
}
int main()
{dabiao();int n,k;while(scanf("%d%d",&n,&k)!=EOF){printf("%lld\n",f[n][k+1]);}return 0;
}