제출 #586603

#제출 시각아이디문제언어결과실행 시간메모리
586603blueSkyscraper (JOI16_skyscraper)C++17
20 / 100
166 ms89096 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; using ll = long long; using vi = vector<int>; const ll mod = 1'000'000'007LL; ll ad(ll a, ll b) { return (a+b) % mod; } int main() { int N, L; cin >> N >> L; vi A(N); for(int i = 0; i < N; i++) cin >> A[i]; int DP[(1<<N)][N][1+L]; for(int m = 0; m < (1<<N); m++) for(int i = 0; i < N; i++) for(int l = 0; l <= L; l++) DP[m][i][l] = 0; for(int i = 0; i < N; i++) DP[(1<<i)][i][0] = 1; for(int m = 0; m < (1<<N); m++) { for(int i = 0; i < N; i++) { if(!(m & (1<<i))) continue; if(m == (1<<i)) continue; int m2 = m ^ (1<<i); for(int j = 0; j < N; j++) { if(!(m2 & (1<<j))) continue; for(int l = abs(A[i] - A[j]); l <= L; l++) DP[m][i][l] = ad(DP[m][i][l], DP[m2][j][l - abs(A[i] - A[j])]); } } } int res = 0; for(int i = 0; i < N; i++) for(int z = 0; z <= L; z++) res = ad(res, DP[(1<<N) - 1][i][z]); cout << res << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...