Submission #73939

#TimeUsernameProblemLanguageResultExecution timeMemory
73939duckmoon99Homecoming (BOI18_homecoming)C++14
0 / 100
1069 ms49088 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 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); if(k==1){ ll ans = 0; for(int i = 0; i < n; i++){ ans+=max(0,A[i]-B[i]); } ret ans; } int N = n; for(int T = 0; T < N; T++){ //cout << "**" << t << endl; //banning the t-th book vi a, b; a.pb(0); b.pb(0); for(int i = 1; i < N; i++){ a.pb(A[(i+T)%N]); b.pb(B[(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; n-1<i+k-1; i--){ for(int j = k; j >= 0; j--){ if(i+j-1>n-1){ dp[i][j]=-INF; } else{ ll t=cost[i+j-1]-cost[i-1]; dp[i][j]=-t; dp[i][j]=max(dp[i][j+1],-t); } } } for(int i = n-k; i >= 1; 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]-cost[i-1]; dp[i][j]=-t; dp[i][j]=max(dp[i][j+1],-t+dp[i+j][0]); } } } anss=max(anss,dp[1][0]); } 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...