233062026-01-18 18:24:19999Rendőrségi Üldözés 4cpp17Accepted 100/100643ms235780 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
#define int long long
const long long INF=1e18;

//dp[i][j]:
/*
    mikor mehetsz tovabb i-tol leghamarabb ha j darab csalas van hatra.
*/
signed main() {
    int n,r,t,l;cin>>n>>r>>t>>l;
    vector<int> be(n+1,0),v(n+1,0);
    vector<vector<int>> dp(n+1,vector<int>(r+1,INF));
    dp[0][r]=0;
    for(int i = 1;i<=n;i++){
        cin>>be[i];
        v[i]=be[i]-be[i-1];
        dp[i][r]=dp[i-1][r]+v[i];
        if(dp[i][r]%(2*t)>=t)dp[i][r]+=2*t-dp[i][r]%(2*t);
    }
    for(int i = 1;i<=n;i++){
        //cout<<dp[i][r]<<' ';
        for(int j=0;j<r;j++){
            dp[i][j]=dp[i-1][j]+v[i];
            if(dp[i][j]%(2*t)>=t)dp[i][j]+=2*t-dp[i][j]%(2*t);
            if(dp[i][j]>dp[i-1][j+1]+v[i])dp[i][j]=dp[i-1][j+1]+v[i];
        }
    }
    int mx=INF;
    for(int j=0;j<=r;j++){
        mx=min(mx,dp[n][j]);
    }
    cout<<l-be[n]+mx;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted1ms316 KiB
subtask210/10
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted1ms556 KiB
6Accepted1ms316 KiB
7Accepted1ms368 KiB
subtask315/15
8Accepted1ms332 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
subtask415/15
12Accepted1ms316 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
subtask525/25
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted1ms316 KiB
19Accepted1ms316 KiB
20Accepted1ms316 KiB
subtask615/15
21Accepted1ms316 KiB
22Accepted1ms316 KiB
23Accepted1ms316 KiB
24Accepted1ms316 KiB
25Accepted2ms564 KiB
subtask720/20
26Accepted14ms3264 KiB
27Accepted28ms8756 KiB
28Accepted75ms24256 KiB
29Accepted230ms79152 KiB
30Accepted643ms235780 KiB