Pagini recente » StarGold | Cod sursa (job #1735416) | Cod sursa (job #3266357) | Cod sursa (job #520365) | Cod sursa (job #3247581)
#include <bits/stdc++.h>
const std :: string FILENAME = "";
std :: ifstream f (FILENAME + ".in");
std :: ofstream g (FILENAME + ".out");
const long long NMAX = 2e3 + 5;
const long long mod = 1e9 + 7;
long long n;
long long h;
long long v[NMAX];
long long dp[NMAX][NMAX];
int main()
{
std :: ios_base :: sync_with_stdio(false);
std :: cin.tie(NULL);
std :: cin >> n >> h;
for(long long i = 1; i <= n; i ++)
{
std :: cin >> v[i];
}
dp[1][0] = (v[1] == h || v[1] + 1 == h ? 1 : 0);
dp[1][1] = (v[1] + 1 == h ? 1 : 0);
for (long long i = 2; i <= n + 1; i ++)
{
for (long long j = std :: max(0ll,h - v[i]- 1); j <= std :: min(h - v[i],i) ; j ++)
{
if (v[i] + j == h)
{
dp[i][j] += dp[i - 1][j];
dp[i][j] %= mod;
if (j > 0)
{
dp[i][j] += dp[i - 1][j - 1];
dp[i][j] %= mod;
}
}
if (j + v[i] + 1 == h)
{
dp[i][j] += dp[i - 1][j];
dp[i][j] = (1ll * dp[i][j] + dp[i - 1][j] * j) % mod;
dp[i][j] = (1ll * dp[i][j] + dp[i - 1][j + 1] * (j + 1)) % mod;
}
}
}
std :: cout << dp[n][0];
return 0;
}