Submission #1029360

#TimeUsernameProblemLanguageResultExecution timeMemory
1029360codefoxSkyscraper (JOI16_skyscraper)C++17
20 / 100
408 ms524288 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast") #define int long long const int mod = 1e9 + 7; int32_t main() { int n, l; cin >> n >> l; if (n==1) { cout << 1; return 0; } vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } sort(nums.begin(), nums.end()); vector<vector<vector<vector<int>>>> dp(n+1, vector<vector<vector<int>>>(l+1, vector<vector<int>>(n+1, vector<int>(3, 0)))); dp[1][0][1][0] = 1; dp[1][0][1][1] = 2; for (int i = 1; i < n; i++) { for (int j = 0; j <= l; j++) { for (int k = 1; k <= i; k++) { for (int m =0; m < 3; m++) { int nsum = j; nsum = j+(k*2-m)*(nums[i]-nums[i-1]); if(nsum > l) continue; dp[i+1][nsum][k][m] += dp[i][j][k][m]*(k*2-m); dp[i+1][nsum][k-1][m] += dp[i][j][k][m]*(k-1); dp[i+1][nsum][k+1][m] += dp[i][j][k][m]*(k+1-m); if(m!=2) { dp[i+1][nsum][k+1][m+1] += dp[i][j][k][m]*(2-m); if(k) dp[i+1][nsum][k][m+1] += dp[i][j][k][m]*(2-m); dp[i+1][nsum][k+1][m+1]%=mod; dp[i+1][nsum][k][m+1]%=mod; } dp[i+1][nsum][k][m]%=mod; dp[i+1][nsum][k-1][m]%=mod; dp[i+1][nsum][k+1][m]%=mod; } } } } int sum = 0; for (int i = 0; i <= l; i++) { sum += dp[n][i][1][2]; sum%=mod; } cout << sum; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...