78182024-01-11 11:51:01TundeBenzinkút üzemeltetés (55)cpp17Accepted 55/558ms11688 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 << " ";
    }
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/03ms2020 KiB
2Accepted0/08ms10156 KiB
3Accepted3/33ms2560 KiB
4Accepted3/33ms2768 KiB
5Accepted3/33ms2868 KiB
6Accepted3/33ms2924 KiB
7Accepted3/33ms3136 KiB
8Accepted3/33ms3500 KiB
9Accepted3/33ms3696 KiB
10Accepted3/33ms3656 KiB
11Accepted3/33ms3696 KiB
12Accepted3/34ms5768 KiB
13Accepted4/44ms6600 KiB
14Accepted4/46ms7648 KiB
15Accepted5/57ms8620 KiB
16Accepted6/68ms10112 KiB
17Accepted6/68ms11688 KiB