236332026-01-26 18:35:14KristófBenzinkút üzemeltetés (55)cpp17Hibás válasz 3/552ms508 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    int n,k;
    cin>>n>>k;
    vector<pair<int,int>> data(n);
    for(auto &x:data)cin>>x.first>>x.second;
    vector<vector<int>> dp(n+1,vector<int> (3,0));// 0:legjobb érték 1: ezelotti
    //dp[0][0]=0;
    dp[0][0]=data[0].second;
    dp[0][1]=-1;
    for(int i=1;i<n;i++)
        {
        dp[i][0]=data[i].second;
        dp[i][1]=-1;
        if(dp[i-1][0]>data[i].second)
            {
            dp[i][0]=dp[i-1][0];
            if(dp[i-1][1]==-1)
                dp[i][1]=i-1;
            else dp[i][1]=dp[i-1][1];
            }
        int j=i-1;
        while(j>-1 && data[j].first+k>data[i].first)j--;
        if(j>=0)
            {
           // cout<<j<<"aaaa\n";
            if(dp[j][0]+data[i].second>dp[i][0])
                {
                dp[i][0]=dp[j][0]+data[i].second;
                if(dp[j][1]==-1)
                    dp[i][1]=j;
                else
                    dp[i][1]=dp[j][1];
                }
            }
        }
    cout<<dp[n-1][0]<<"\n";
    vector<int> ans;
    ans.reserve(n);
    int b=n-1;
    while(b!=-1)
        {
        if((dp[b][1]!=-1 && dp[b][0]==(dp[dp[b][1]][0]+data[b].second)) || dp[b][0]==data[b].second)
            ans.push_back(b);
        b=dp[b][1];
        }
    reverse(ans.begin(),ans.end());
    cout<<ans.size();
    for(int x:ans)cout<<" "<<x+1;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base3/55
1Elfogadva0/01ms316 KiB
2Hibás válasz0/02ms500 KiB
3Hibás válasz0/31ms508 KiB
4Elfogadva3/31ms316 KiB
5Hibás válasz0/31ms316 KiB
6Hibás válasz0/31ms316 KiB
7Hibás válasz0/31ms316 KiB
8Hibás válasz0/31ms316 KiB
9Hibás válasz0/31ms392 KiB
10Hibás válasz0/31ms316 KiB
11Hibás válasz0/31ms316 KiB
12Hibás válasz0/31ms316 KiB
13Hibás válasz0/41ms316 KiB
14Hibás válasz0/41ms508 KiB
15Hibás válasz0/51ms316 KiB
16Hibás válasz0/61ms316 KiB
17Hibás válasz0/62ms508 KiB