1513 2022. 11. 21 20:21:32 kicsiboglar Benzinkút üzemeltetés (55) cpp11 Elfogadva 55/55 3ms 3836 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 Összpont Teszt Verdikt Idő Memória
base 55/55
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 3ms 2208 KiB
3 Elfogadva 3/3 3ms 2348 KiB
4 Elfogadva 3/3 3ms 2460 KiB
5 Elfogadva 3/3 3ms 2676 KiB
6 Elfogadva 3/3 3ms 2752 KiB
7 Elfogadva 3/3 3ms 2880 KiB
8 Elfogadva 3/3 3ms 3112 KiB
9 Elfogadva 3/3 3ms 3232 KiB
10 Elfogadva 3/3 3ms 3312 KiB
11 Elfogadva 3/3 3ms 3408 KiB
12 Elfogadva 3/3 3ms 3204 KiB
13 Elfogadva 4/4 3ms 3204 KiB
14 Elfogadva 4/4 3ms 3208 KiB
15 Elfogadva 5/5 3ms 3472 KiB
16 Elfogadva 6/6 3ms 3704 KiB
17 Elfogadva 6/6 3ms 3836 KiB