Submission #1264982

#TimeUsernameProblemLanguageResultExecution timeMemory
1264982goulthenHolding (COCI20_holding)C++20
22 / 110
166 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define fi first
#define se second

const int MAXN = 1e2 + 10;
const int INF = 1e18+10;
int a[MAXN], dp[MAXN][MAXN][10001], dp2[MAXN][MAXN][10001];

int32_t main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int n,l,r,K, s=0;cin >> n >> l >> r >> K;
	rep(i,1,n) cin >> a[i];
	rep(i,l,r) s+=a[i];

	rep(j,0,n) rep(k,0,K) dp[0][j][k] = dp2[n+1][j][k]= INF;
	dp[0][0][0] = dp2[n+1][0][0] = 0;

	rep(i,1,l-1) {
		rep(j,0,n) {
			rep(k,0,K) {
				dp[i][j][k] = dp[i-1][j][k];
				if (j > 0 && k >= l-i) dp[i][j][k] = min(dp[i][j][k], dp[i-1][j-1][k-(l-i)] + a[i]);
			}
		}
	}

	rep(i,l,n) {
		rep(j,0,n) {
			rep(k,0,K) {
				dp[i][j][k] = dp[i-1][j][k];
				if (k >= i-l) dp[i][j][k] = min(dp[i][j][k], dp[i-1][j+1][k-(i-l)] - a[i]);
			}
		}
	}


	per(i,n,r+1) {
		rep(j,0,n) {
			rep(k,0,K) {
				dp2[i][j][k] = dp2[i+1][j][k];
				if (j > 0 && k >= i-r) dp2[i][j][k] = min(dp2[i][j][k], dp2[i+1][j-1][k-(i-r)] + a[i]);
			}
		}
	}

	per(i,r,1) {
		rep(j,0,n) {
			rep(k,0,K) {
				dp2[i][j][k] = dp2[i+1][j][k];
				if (k >= r-i) dp2[i][j][k] = min(dp2[i][j][k], dp2[i+1][j+1][k-(r-i)] - a[i]);
			}
		}
	}

	rep(i,1,n) rep(j,0,n) rep(k,1,K) dp[i][j][k] = min(dp[i][j][k], dp[i][j][k-1]);
	rep(i,1,n) rep(j,0,n) rep(k,1,K) dp2[i][j][k] = min(dp2[i][j][k], dp2[i][j][k-1]);

	int x = 0;

	rep(mid,l-1,r) {
		rep(k,0,K) {
			x = min(x, dp[mid][0][k] + dp2[mid+1][0][K-k]);
		}
	}
	cout << s + x << '\n';
	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...