Submission #1017437

#TimeUsernameProblemLanguageResultExecution timeMemory
1017437vjudge1Holding (COCI20_holding)C++17
55 / 110
31 ms25920 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 52, K = 1e4 + 5;
int n, l, r, money, a[N];
int dp[N][N][K];

int main(){
    cin >> n >> l >> r >> money;
    for (int i = 1; i <= n; i ++)
        cin >> a[i];

    for (int i = 0; i < K; i ++)
        dp[l][l][i] = a[l];

    for (int i = l; i <= r; i ++){
        for (int j = l; j > 0; j --){
            for (int k = 0; k <= money; k ++){
                if (j == l){
                    dp[i][j][k] = dp[i - 1][j][k] + a[i];
                    continue;
                }
                
                dp[i][j][k] = min(dp[i - 1][j][k] + a[i], dp[i][j + 1][k]);
                // cout << i << " " << j << " " << k << " : " << dp[i][j][k] << endl;
                if (k > 0)
                    dp[i][j][k] = min(dp[i][j][k], dp[i][j][k - 1]);
                if (k >= abs(i - j))
                    dp[i][j][k] = min(dp[i][j][k], dp[i - 1][j + 1][k - abs(i - j)] + a[j]);
            }
        }
    }

    cout << dp[r][1][money] << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...