Submission #1254112

#TimeUsernameProblemLanguageResultExecution timeMemory
1254112tvgkSkyscraper (JOI16_skyscraper)C++20
100 / 100
240 ms161092 KiB
#include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 1e2 + 7, MOD = 1e9 + 7, mxX = 1e3 + 7; int n, mx, a[mxN]; ll dp[mxN][mxN][mxX][4]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); cin >> n >> mx; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); if (n == 1) { cout << 1; return 0; } a[n + 1] = a[n]; dp[0][2][0][2] = 1; for (int i = 1; i <= n; i++) { for (int j = 1 + (i != n); j <= n; j++) { for (int b = 0; b <= 2; b++) { ll cost = (2 * j - 2 - b) * (a[i + 1] - a[i]); for (int k = cost; k <= mx; k++) { //tao thanh phan lien thong moi dp[i][j][k][b] = (dp[i][j][k][b] + dp[i - 1][j - 1][k - cost][b]) % MOD; //noi bien dp[i][j][k][b] = (dp[i][j][k][b] + (b + 1) * dp[i - 1][j][k - cost][b + 1]) % MOD; //noi lien thong khac dp[i][j][k][b] = (dp[i][j][k][b] + (2 * j - 2 - b) * dp[i - 1][j][k - cost][b]) % MOD; //noi 2 tplt tu do ll num = j - 1; dp[i][j][k][b] = (dp[i][j][k][b] + num * (num - 1) * dp[i - 1][j + 1][k - cost][b]) % MOD; //noi bien va tplt dp[i][j][k][b] = (dp[i][j][k][b] + 1LL * (j - 1) * (b + 1) * dp[i - 1][j + 1][k - cost][b + 1]) % MOD; //noi tplt o bien va tplt tu do dp[i][j][k][b] = (dp[i][j][k][b] + 1LL * (j - 1) * (2 - b) * dp[i - 1][j + 1][k - cost][b]) % MOD; //vi tri cuoi cung if (i == n) dp[i][j][k][b] = (dp[i][j][k][b] + dp[i - 1][j + 1][k - cost][b] + dp[i - 1][j + 1][k - cost][b + 1]) % MOD; } } } } ll ans = 0; for (int i = 0; i <= mx; i++) ans = (ans + dp[n][1][i][0]) % MOD; cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...