Submission #1017344

#TimeUsernameProblemLanguageResultExecution timeMemory
1017344vjudge1Holding (COCI20_holding)C++17
110 / 110
41 ms4444 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int const N=105; int const K=10005; int const mod=1e9+7; int dp_pre[2][N][K],dp_suf[N][2][K]; int arr[N]; int main(){ int n,L,R,k; cin>>n>>L>>R>>k; for (int i = 1; i <=n; ++i) cin>>arr[i]; int debt=0; for (int i = L; i <=R; ++i) debt+=arr[i]; //compute dp_pre; for(int l=L-1;l>=1;l--) for(int r=L;r<=R;r++) for(int c=0;c<=k;c++){ dp_pre[l%2][r][c]=max(dp_pre[(l+1)%2][r][c],dp_pre[l%2][r-1][c]); if(c>=r-l) dp_pre[l%2][r][c]=max(dp_pre[l%2][r][c],dp_pre[(l+1)%2][r-1][c-(r-l)]+max(0,(arr[r]-arr[l]))); } //compute suf_dp; for(int r=R+1;r<=n;r++) for(int l=R;l>=L;l--) for(int c=0;c<=k;c++){ dp_suf[l][r%2][c]=max(dp_suf[l+1][r%2][c],dp_suf[l][(r-1)%2][c]); if(c>=r-l) dp_suf[l][r%2][c]=max(dp_suf[l][r%2][c],dp_suf[(l+1)][(r-1)%2][c-(r-l)]+max(0,(arr[l]-arr[r]))); } int mx=0; for(int i=L-1;i<=R;i++) for(int c=0;c<=k;c++) mx=max(dp_pre[1][i][c]+dp_suf[i+1][n%2][k-c],mx); cout<<debt-mx<<endl; 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...