제출 #1183999

#제출 시각아이디문제언어결과실행 시간메모리
1183999sanoHoliday (IOI14_holiday)C++20
0 / 100
65 ms131072 KiB
//#pragma GCC optimize("O3") //#pragma GCC target("tune=native") //#pragma GCC optimize("O3,unroll-loops") //#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include "holiday.h" #include<iostream> #include<vector> #include<queue> #include<deque> #include<string> #include<fstream> #include<algorithm> #include <iomanip> #include<map> #include <set> #include <unordered_map> #include <stack> #include <unordered_set> #include <cmath> #include <cstdint> #include <cassert> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define shit short int #define ll long long //#define int ll #define For(i, n) for(int i = 0; i < (int)n; i++) #define ffor(i, a, n) for(int i = (int)a; i < (int)n; i++) #define rfor(i, n) for(int i = (int)n; i >= (int)0; i--) #define rffor(i, a, n) for(int i = (int)n; i >= (int)a; i--) #define vec vector #define ff first #define ss second #define pb push_back #define pii pair<int, int> #define NEK 2000000000 #define mod 1000000007 #define mod2 1000000009 #define rsz resize #define prv1 47 #define prv2 43 #define D 8 #define trav(a,x) for (auto& a: x) #define pb push_back #define ub upper_bound #define lb lower_bound #define all(x) (x).begin(), (x).end() #define sig 0.0000001 using namespace std; //using namespace __gnu_pbds; //template <typename T1, typename T2> //using indexed_set = tree<pair<T1, T2>, null_type, less<pair<T1, T2>>, rb_tree_tag, tree_order_statistics_node_update>; ll findMaxAttraction(int n, int start, int d, int a2[]) { vec<ll> a; For(i, n) a.push_back(a2[i]); vec<vec<ll>> dp1(n - start, vec<ll>(d + 1, 0)); vec<vec<ll>> dp3(n - start, vec<ll>(d + 1, 0)); vec<vec<ll>> dp2(start, vec<ll>(d + 1, 0)); vec<vec<ll>> dp4(start, vec<ll>(d + 1, 0)); rfor(i, dp1.size() - 1) { ffor(j, 1, dp1[i].size()) { dp1[i][j] = a[i + start]; if (i == dp1.size() - 1) continue; dp1[i][j] = max(dp1[i][j], dp1[i + 1][j - 1]); if (j == 1) continue; dp1[i][j] = max(dp1[i][j], dp1[i + 1][j - 2] + a[i + start]); } } if (start == 0) { return dp1[0][d]; } rfor(i, dp3.size() - 1) { ffor(j, 1, dp3[i].size()) { dp3[i][j] = a[i + start]; if (i == dp3.size() - 1) continue; if (j == 1) continue; dp3[i][j] = max(dp3[i][j], dp3[i + 1][j - 2]); if (j == 2) continue; dp3[i][j] = max(dp3[i][j], dp3[i + 1][j - 3] + a[i + start]); } } For(i, dp2.size()) { ffor(j, 1, dp2[i].size()) { dp2[i][j] = a[i]; if (i == 0) continue; dp2[i][j] = max(dp2[i][j], dp2[i - 1][j - 1]); if (j == 1) continue; dp2[i][j] = max(dp2[i][j], dp2[i - 1][j - 2] + a[i]); } } rfor(i, dp4.size() - 1) { ffor(j, 1, dp4[i].size()) { dp4[i][j] = a[i]; if (i == 0) continue; if (j == 1) continue; dp4[i][j] = max(dp4[i][j], dp4[i - 1][j - 2]); if (j == 2) continue; dp4[i][j] = max(dp4[i][j], dp4[i - 1][j - 3] + a[i]); } } ll maxi = 0; maxi = dp1[0][d]; For(i, d) { maxi = max(maxi, dp3[0][d - i - 1] + dp2.back()[i]); maxi = max(maxi, dp4.back()[max(0, d - i - 2)] + dp1[0][i]); } return maxi; } /* signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; t = 1; For(i, t) { int n, d, start; cin >> n >> d >> start; int a[100]; For(i, n) cin >> a[i]; cout << findMaxAttraction(n, start, d, a); } return 0; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...