184532025-10-23 10:12:01KristófBenzinkút üzemeltetés (55)cpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base55/55
1Elfogadva0/01ms500 KiB
2Elfogadva0/03ms1332 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/31ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/31ms316 KiB
11Elfogadva3/31ms316 KiB
12Elfogadva3/32ms516 KiB
13Elfogadva4/42ms812 KiB
14Elfogadva4/42ms820 KiB
15Elfogadva5/52ms1132 KiB
16Elfogadva6/62ms1332 KiB
17Elfogadva6/63ms1380 KiB