Submission #73884

#TimeUsernameProblemLanguageResultExecution timeMemory
73884duckmoon99Homecoming (BOI18_homecoming)C++14
0 / 100
1068 ms58448 KiB
//#include "homecoming.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fi first #define se second #define mp make_pair #define pb push_back #define fbo find_by_order #define ook order_of_key #define INF 1e18 #define ret return typedef long long ll; typedef pair<int,int> ii; typedef vector<int> vi; typedef vector < pair<int, int> > vii; typedef long double ld; typedef tree<pair<int,int>, null_type, less<pair<int,int> >, rb_tree_tag, tree_order_statistics_node_update> pbds; typedef set<int>::iterator sit; typedef map<int,int>::iterator mit; typedef vector<int>::iterator vit; ll dp[2222222]; ll solve(int n, int k, int *A, int *B){ ll tA = 0; ll tB = 0; for(int i = 0; i < n; i++){ tA+=A[i]; tB+=B[i]; } ll anss = max(ll(0),tA-tB); int N = n; for(int t = 0; t < N; t++){ //banning the t-th book vi a, b; for(int i = 1; i < N; i++){ a.pb(A[(i+t)%N]); b.pb(A[(i+t)%N]); } n=a.size(); ll dp[n][k+5]; ll cost[n]; cost[0]=b[0]; for(int i = 1; i < n; i++){ cost[i]=b[i]+cost[i-1]; } for(int i = n-1; i >= n-k; i--){ for(int j = k; j >= 0; j--){ if(i+j-1>=n){ dp[i][j]=-INF; } else{ ll t = cost[i+j-1]; if(i>=1)t-=cost[i-1]; dp[i][j]=max(dp[i][j+1],t); } } } for(int i = n-k-1; i >= 0; i--){ for(int j = k; j >= 0; j--){ if(j==k){ dp[i][j]=A[i]-B[i]+dp[i+1][j-1]; } else{ ll t = cost[i+j-1]; if(i>=1)t-=cost[i-1]; dp[i][j]=max(dp[i][j+1],t+dp[i+j][0]); } } } anss=max(dp[0][0],anss); } ret anss; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...