Submission #848372

#TimeUsernameProblemLanguageResultExecution timeMemory
848372Onur_IlgazHolding (COCI20_holding)C++17
110 / 110
201 ms16592 KiB
#include <bits/stdc++.h>
#define fast cin.tie(0)->sync_with_stdio(0);
#define int long long
#define inf ((int)1e18)
#define N 105
using namespace std;
int arr[N];

int32_t main(){
	fast
	int n, l, r, money;
	cin>>n>>l>>r>>money;
	int sum = 0;
	for(int i = 1; i <= n; i++) {
		cin>>arr[i];
		if(i >= l and i <= r) sum += arr[i];
	}
	vector <vector<int> > dp(n + 2, vector<int> (money + 1, inf));
	dp[l][0] = sum;
	for(int i = 1; i <= n; i++) { // from
		if(i >= l and i <= r) continue; //!
		vector <vector<int> > ndp = dp;

		for(int j = l; j <= r; j++) { // to
			for(int k = 0; k <= money; k++) { // k
				// swapped j and i
				if(k + abs(i - j) <= money) {
					// cout<<i<<" "<<j<<" | ";
					ndp[j + 1][k + abs(i - j)] = min(
						ndp[j + 1][k + abs(i - j)],
						dp[j][k] + (arr[i] - arr[j])
					);
					// if(ndp[j + 1][k + abs(i - j)] < 100) 
						// cout<<j + 1<<" "<<k + abs(i - j)<<" "<<ndp[j + 1][k + abs(i - j)]<<"\n";
				}
				dp[j + 1][k] = min(
					dp[j + 1][k], 
					dp[j][k]
				);
			}
		}
		dp = ndp;
		// cout<<"changed\n\n";
	}
	// cout<<"dp: ";
	for(auto &it:dp) {
		for(auto &itt:it) {
			sum = min(sum, itt);
			// if(itt < 100) cout<<itt<<" ";
		}
	}
	cout<<sum;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...