Submission #395944

#TimeUsernameProblemLanguageResultExecution timeMemory
395944fadi57Holding (COCI20_holding)C++14
0 / 110
114 ms262148 KiB
#include<bits/stdc++.h> using namespace std; const int mx=60; int n,l,r,k; typedef long long ll; ll a[mx]; int dp[mx][mx][10010]; int dp2[mx][mx][10010]; int solveL(int i,int j,int left){ if(j<l){return 0;} if(i<0){return 0;} int &ret=dp[i][j][left]; if(ret!=-1){return ret;} if(abs(j-i)<=left){ ret=solveL(i-1,j-1,left-abs(j-i))+(a[j]-a[i]); } ret=max(ret,solveL(i-1,j,left)); ret=max(ret,solveL(i,j-1,left)); return ret; } int solveR(int i,int j,int left){ if(j>r){return 0;} if(i==n){return 0;} int &ret=dp2[i][j][left]; if(ret!=-1){return ret;} if(abs(j-i)<=left){ ret=solveR(i+1,j+1,left-abs(j-i))+(a[j]-a[i]); } ret=max(ret,solveR(i+1,j,left)); ret=max(ret,solveR(i,j+1,left)); return ret; } int main(){ cin>>n>>l>>r>>k; l--; r--; ll sum=0; ll ans; memset(dp,-1,sizeof(dp)); memset(dp2,-1,sizeof(dp2)); for(int i=0;i<n;i++){ cin>>a[i]; if(i>=l&&i<=r){sum+=a[i];} } ans=sum; for(int i=l-1;i<=r;i++){ for(int j=0;j<=k;j++){ ll z=solveL(l-1,i,j)+solveR(r+1,i+1,k-j); ans=min(sum-z,ans); //cout<<z; } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...