Submission #844585

#TimeUsernameProblemLanguageResultExecution timeMemory
844585vjudge1Holding (COCI20_holding)C++17
110 / 110
127 ms14684 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define endl "\n"
#define all(aa) aa.begin(), aa.end()

int main(){
	int n, L, R, C;
	cin>>n>>L>>R>>C;

	vector<int> val(n+1);
	int ans=0;
	for(int i=1; i<=n; i++){
		cin>>val[i];
		if(i>=L && i<=R) ans+=val[i];
	}

	vector<vector<vector<int>>> dp_l(L+2, vector<vector<int>>(n-R+2, vector<int>(C+1)));
	for(int i=R; i>=L; i--){
		vector<vector<vector<int>>> dp(L+2, vector<vector<int>>(n-R+2, vector<int>(C+1)));
		for(int l=0; l<=L-1; l++){
			for(int rr=n+1; rr>=R+1; rr--){
				for(int c=0; c<=C; c++){
					int r=rr-R-1;
					dp[l][r][c]=dp_l[l][r][c];
					if(l>0){
						if(c>=i-l)
							dp[l][r][c]=min(dp[l][r][c], dp_l[l-1][r][c-(i-l)]+val[l]-val[i]);
						dp[l][r][c]=min(dp[l][r][c], dp[l-1][r][c]);
					}
					if(rr<=n){
						if(c>=rr-i)
							dp[l][r][c]=min(dp[l][r][c], dp_l[l][r+1][c-(rr-i)]+val[rr]-val[i]);
						dp[l][r][c]=min(dp[l][r][c], dp[l][r+1][c]);
					}
				}
			}
		}
		dp_l=dp;
	}

	cout<<ans+dp_l[L-1][0][C];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...