7818 2024. 01. 11 11:51:01 Tunde Benzinkút üzemeltetés (55) cpp17 Elfogadva 55/55 8ms 11688 KiB
#include <iostream>

using namespace std;

struct piheno
{
    int s, d, h;
};

int main()
{
    int n, k;
    cin >> n >> k;
    piheno t[n];
    int a[n][n];
    int h[n];
    for(int i=0; i<n; i++)
    {
        cin >> t[i].d >> t[i].h;
        h[i]=0;
        for(int j=0; j<n; j++)
        {
            a[i][j]=0;
        }
    }
    for(int i=0; i<n; i++)
    {
        if(i==0)
        {
            a[0][0]=1;
            h[0]=t[0].h;
        }
        else
        {
            int x=0, l1=0, l2=0, w1=-1, w2=-1;
            for(int j=i-1; j>=0 && x==0; j--)
            {
                if(t[i].d-t[j].d>=k)
                    x=j+1;
            }
            for(int j=x; j<i; j++)
            {
                if(h[j]>l2)
                {
                    l2=h[j];
                    w2=j;
                }
            }
            if(x!=0)
            {
                for(int j=x-1; j>=0; j--)
                {
                    if(h[j]>l1)
                    {
                        l1=h[j];
                        w1=j;
                    }
                }
            }
            if(w1==-1)
            {
                if(t[i].h>l2)
                {
                    h[i]=t[i].h;
                    a[i][i]=1;
                }
                else
                {
                    h[i]=h[w2];
                    for(int j=0; j<=w2; j++)
                    {
                        a[j][i]=a[j][w2];
                    }
                }
            }
            else
            {
                if(h[w2]>(t[i].h+h[w1]))
                {
                    h[i]=h[w2];
                    for(int j=0; j<=w2; j++)
                    {
                        a[j][i]=a[j][w2];
                    }
                }
                else
                {
                    h[i]=h[w1]+t[i].h;
                    for(int j=0; j<=w1; j++)
                    {
                        a[j][i]=a[j][w1];
                    }
                    a[i][i]=1;
                }
            }
        }
    }
    cout << h[n-1] << endl;
    int db=0;
    for(int i=0; i<n; i++)
    {
        if(a[i][n-1]==1)
            ++db;
    }
    cout << db << " ";
    for(int i=0; i<n; i++)
    {
        if(a[i][n-1]==1)
            cout << i+1 << " ";
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 55/55
1 Elfogadva 0/0 3ms 2020 KiB
2 Elfogadva 0/0 8ms 10156 KiB
3 Elfogadva 3/3 3ms 2560 KiB
4 Elfogadva 3/3 3ms 2768 KiB
5 Elfogadva 3/3 3ms 2868 KiB
6 Elfogadva 3/3 3ms 2924 KiB
7 Elfogadva 3/3 3ms 3136 KiB
8 Elfogadva 3/3 3ms 3500 KiB
9 Elfogadva 3/3 3ms 3696 KiB
10 Elfogadva 3/3 3ms 3656 KiB
11 Elfogadva 3/3 3ms 3696 KiB
12 Elfogadva 3/3 4ms 5768 KiB
13 Elfogadva 4/4 4ms 6600 KiB
14 Elfogadva 4/4 6ms 7648 KiB
15 Elfogadva 5/5 7ms 8620 KiB
16 Elfogadva 6/6 8ms 10112 KiB
17 Elfogadva 6/6 8ms 11688 KiB