# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1142867 | simplemind_31 | 휴가 (IOI14_holiday) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> ATRA;
vector<vector<ll>> dp;
ll maxi=0,N;
ll solveiz(ll dia, ll posicion){
if(dia<=0 || posicion<0 || posicion>=N){
return 0;
}
if(dp[dia][posicion]!=0){
return dp[dia][posicion];
}
ll op1=ATRA[posicion]+solveiz(dia-2,posicion-1);
ll op2=solveiz(dia-1,posicion-1);
return dp[dia][posicion]=max(op1,op2);
}
ll solvede(ll dia, ll posicion){
if(dia<=0 || posicion<0 || posicion>=N){
return 0;
}
if(dp[dia][posicion]!=0){
return dp[dia][posicion];
}
ll op1=ATRA[posicion]+solvede(dia-2,posicion+1);
ll op2=solvede(dia-1,posicion+1);
return dp[dia][posicion]=max(op1,op2);
}
ll findMaxAttraction(int n,int start,int d,int attraction[]) {
N=n;
ATRA.resize(n);
for(ll i=0;i<n;i++){
ATRA[i]=attraction[i];
}
for(ll i=0;i<n;i++){
dp.clear();
dp.assign(d+5,vector<ll>(n+5,0));
maxi=max(maxi,solveiz(d-abs(start-i),i));
dp.clear();
dp.assign(d+5,vector<ll>(n+5,0));
maxi=max(maxi,solvede(d-abs(start-i),i));
}
return maxi;
}
int main() {
int n, start, d;
int attraction[100000];
int i, n_s;
n_s = scanf("%d %d %d", &n, &start, &d);
for (i = 0 ; i < n; ++i) {
n_s = scanf("%d", &attraction[i]);
}
printf("%lld\n", findMaxAttraction(n, start, d, attraction));
return 0;
}