#include <bits/stdc++.h>
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define pb push_back
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long ll;
typedef pair <ll, ll> pii;
const int N = 101, K = 1001, mod = 1e9 + 7;
inline int add(int x, int y) {return x+y<mod ? x+y : x+y-mod;}
inline int mul(int x, int y) {return (ll)x*y%mod;}
int n, l;
int a[N];
int dp[N][N][K][3];
int main () {
FIO;
cin >> n >> l;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a+n);
dp[0][1][0][0] = 1;
dp[0][1][0][1+(n==1)] = 2-(n==1);
for (int i = 1; i < n; i++) {
int x = a[i]-a[i-1];
for (int j = 1; j <= n; j++) {
for (int k = 0; k <= l; k++) {
for (int g = 0; g < 3; g++) {
if (k >= (2*j-2-g)*x && j > 1) {
dp[i][j][k][g] = add(dp[i][j][k][g], mul(dp[i-1][j-1][k-(2*j-2-g)*x][g], j-g));
if (g) dp[i][j][k][g] = add(dp[i][j][k][g], mul(dp[i-1][j-1][k-(2*j-2-g+1)*x][g-1], 3-g));
}
if (k >= (2*j-g)*x) {
dp[i][j][k][g] = add(dp[i][j][k][g], mul(dp[i-1][j][k-(2*j-g)*x][g], 2*j-g));
if (g) dp[i][j][k][g] = add(dp[i][j][k][g], mul(dp[i-1][j][k-(2*j-g+1)*x][g-1], 3-g));
}
if (k >= (2*j+2-g)*x && j <= n) {
dp[i][j][k][g] = add(dp[i][j][k][g], mul(dp[i-1][j+1][k-(2*j+2-g)*x][g], j));
}
}
}
}
}
int res = 0;
for (int i = 0; i <= l; i++) res = add(res, dp[n-1][1][i][2]);
cout << res;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |