184532025-10-23 10:12:01KristófBenzinkút üzemeltetés (55)cpp17Accepted 55/553ms1380 KiB
#include <iostream>
#include <vector>

using namespace std;




int elsokisebb(vector<pair<int,int>>&dp,int &i,int &k)
{
int l=i;
while(dp[l].first>dp[i].first-k )
    {
    l--;
    }
return l;
}


void dpfill(vector<pair<int,int>> &dp,vector<pair<int,int>> &data,int &k,int &n,vector<string> &ans)
{
int i=1;
//cout<<i<<endl;
while(i<=n)
    {
    //cout<<i<<" ";
    dp[i].second=max(dp[i-1].second,dp[elsokisebb(dp,i,k)].second+data[i].second);
    if(dp[i].second==dp[i-1].second)ans[i]=ans[i-1];
    else ans[i]=ans[elsokisebb(dp,i,k)]+to_string(i)+" ";
    //cout<<dp[i].second<<" "<<ans[i]<<endl;
    i++;
    }

}




int main()
{
    int n,k;
    cin>>n>>k;
    vector<string> ans(n+1);
    ans[0]="";
    vector<pair<int,int>>dp(n+1);
    dp[0].second=0;
    dp[0].first=INT8_MIN;
    vector<pair<int,int>>data(n+1);
    for(int i=1;i<=n;i++)
        {
        cin>>data[i].first>>data[i].second;
        dp[i].first=data[i].first;
        }
    dpfill(dp,data,k,n,ans);
    cout<<dp[n].second<<endl;
    int cnt=0;
    for(int i=0;i<ans[n].size();i++)
        {
        if(ans[n][i]==' ')cnt++;
        }
    cout<<cnt<<" "<<ans[n];
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/01ms500 KiB
2Accepted0/03ms1332 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted3/31ms316 KiB
9Accepted3/31ms316 KiB
10Accepted3/31ms316 KiB
11Accepted3/31ms316 KiB
12Accepted3/32ms516 KiB
13Accepted4/42ms812 KiB
14Accepted4/42ms820 KiB
15Accepted5/52ms1132 KiB
16Accepted6/62ms1332 KiB
17Accepted6/63ms1380 KiB