15132022-11-21 20:21:32kicsiboglarBenzinkút üzemeltetés (55)cpp11Elfogadva 55/553ms3836 KiB
#include <iostream>
#include <vector>
#define ll long long
using namespace std;

//ifstream cin ("input.in");
//ofstream cout ("output.out");

ll n,m,i,j,a,b,k;
struct element
{
    ll best,before,dis;
    bool ok;
};

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin>>n>>k;
    vector <element> dp(n+1);
    for (i=1;i<=n;++i)
    {
        cin>>a>>b;
        dp[i].dis=a;
        if (i==1)
        {
            dp[i].best=b;
            dp[i].before=i;
            dp[i].ok=true;
            continue;
        }
        dp[i].best=b,dp[i].before=i,dp[i].ok=true;
        j=i-1;
        while (j>=1&&a-dp[j].dis<k)
        {
            if (dp[i].best<dp[j].best)
            {
                dp[i].best=dp[j].best;
                dp[i].before=j;
                dp[i].ok=false;
            }
            j--;
        }
        if (j!=0)
        {
            if (dp[j].best+b>dp[i].best)
            {
                dp[i].best=dp[j].best+b;
                dp[i].before=j;
                dp[i].ok=true;
            }
        }

    }
    cout<<dp[n].best<<"\n";
    vector <ll> res(1);
    i=n;
    if (dp[n].ok) res.push_back(n);
    while (dp[i].before!=i)
    {
        i=dp[i].before;
        if (dp[i].ok) res.push_back(i);
    }
    cout<<res.size()-1<<" ";
    for (i=res.size()-1;i>0;--i) cout<<res[i]<<" ";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base55/55
1Elfogadva0/03ms1828 KiB
2Elfogadva0/03ms2208 KiB
3Elfogadva3/33ms2348 KiB
4Elfogadva3/33ms2460 KiB
5Elfogadva3/33ms2676 KiB
6Elfogadva3/33ms2752 KiB
7Elfogadva3/33ms2880 KiB
8Elfogadva3/33ms3112 KiB
9Elfogadva3/33ms3232 KiB
10Elfogadva3/33ms3312 KiB
11Elfogadva3/33ms3408 KiB
12Elfogadva3/33ms3204 KiB
13Elfogadva4/43ms3204 KiB
14Elfogadva4/43ms3208 KiB
15Elfogadva5/53ms3472 KiB
16Elfogadva6/63ms3704 KiB
17Elfogadva6/63ms3836 KiB