제출 #1100346

#제출 시각아이디문제언어결과실행 시간메모리
1100346rukashii3단 점프 (JOI19_jumps)C++17
5 / 100
413 ms335252 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 5000 + 4; const int maxm = 5000 + 4; int a[maxn] , n , m , dp[maxm][maxm] , ma[maxm][maxm]; int l[maxn] , r[maxn]; void nhap() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1 ; i <= n ; i ++) cin >> a[i]; cin >> m; for (int i = 1 ; i <= m ; i ++) cin >> l[i] >> r[i]; } void xl1(int l , int r) { int ans = 0; for (int i = l ; i <= r - 2 ; i ++) { for (int j = i + 1 ; j <= r - 1 ; j ++) { for (int k = j + (j - i) ; k <= r ; k ++) { ans = max(ans , a[i] + a[j] + a[k]); } } } cout << ans << '\n'; } void Sub1() { for (int i = 1 ; i <= m ; i ++) { xl1(l[i] , r[i]); } } void Sub2() { for (int i = 1 ; i <= n ; i ++) ma[i][i] = a[i]; for (int i = 1 ; i < n ; i ++) for (int j = i + 1 ; j <= n ; j ++) { ma[i][j] = max(ma[i][j - 1] , a[j]); } // for (int i = 1 ; i <= n ; i ++) // dp[i][i] = 0; // for (int i = 1 ; i < n ; i ++) // dp[i][i + 1] = 0; for (int i = 2 ; i < n ; i ++) { for (int j = 1 ; j <= n - i ; j ++) { dp[j][j + i] = max(dp[j][j + i - 1] , max(dp[j + 1][j + i] , a[j] + a[j + i] + ma[j + 1][(j + i + 1) / 2])); } } for (int i = 1 ; i <= m ; i ++) { cout << dp[l[i]][r[i]] << '\n'; } } signed main() { nhap(); if (n <= 100 && m <= 100) Sub1(); else if (n <= 5000) Sub2(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...