1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <vector>

int main()
{
    int nkubkow;
    std::cin>>nkubkow;

    std::vector<std::vector<int> > wartosci;

    int kubkizkulka[nkubkow];

    for(int i=0; i<nkubkow; i++)
    {
        kubkizkulka[i]=0;   //0-nie wiadomo, 1-wiadomo
    }

    int valnum = nkubkow;
    for(int i=0; i<nkubkow; i++)
    {
        std::vector<int> wartemp;
        for(int i1=0; i1<valnum; i1++)
        {
            int w;
            std::cin>>w;
            wartemp.push_back(w);
        }

        wartosci.push_back(wartemp);

        valnum-=1;
    }

    //START ZADANIA
    int cena=0;
    int kubaccompl = 0;    

    start:
    for(int i=0;i<1000000000;i++) //kwota rozpatrywana
    {        
        if(kubaccompl==nkubkow)
        {
            std::cout<<cena;
            return 0;
        }

        for(int j=0; j<nkubkow; j++) //kubek - szereg opcji płatniczych
        {
            for(int k=0; k<wartosci.at(j).size(); k++) //walidacja poszczególnych sytuacji
            {
                if((k==0) && (wartosci.at(j).at(k)==i) && (kubkizkulka[j]!=1))
                {
                    kubkizkulka[j]=1;
                    cena+=i;
                    kubaccompl+=1;
                    //std::cout<<"zerowy - kubek "<<j+1<<" cena "<<i<<std::endl;
                    goto start;
                }

                else if(k!=0 && wartosci.at(j).at(k)==i && kubkizkulka[j+k]!=1)
                {
                    int numaccompl = 0;
                    for(int l=j; l<=j+k; l++)
                    {
                        if(kubkizkulka[l]==1)
                            numaccompl+=1;
                    }

                    if(numaccompl==k)
                    {
                        kubkizkulka[j+k]=1;
                        cena+=i;
                        kubaccompl+=1;
                        //std::cout<<"wykluczanie - kubek "<<j+k+1 << " cena " <<i<<std::endl;
                        goto start;
                    }
                }

                else if(wartosci.at(j).at(k)==i)
                {
                    int allacompli = 0;
                    int poss = 0;
                    for(int m=j; m<=j+k;m++)
                    {
                        if(kubkizkulka[m]==1)
                            allacompli+=1;
                        poss+=1;
                    }
                    if(allacompli==poss-1)
                    {
                        //std::cout<<"TRIED "<<j<<" "<<k<<" cena "<<i<<std::endl;
                        for(int m=j; m<j+k;m++)
                        {
                            if(kubkizkulka[m]==0 && wartosci.at(j).at(k)==i)
                            {
                                kubkizkulka[m]=1;
                                cena+=i;
                                kubaccompl+=1;
                                //std::cout<<"resztki - kubek "<<m+1 << " cena " <<i<<std::endl;
                                goto start;
                            }
                        }
                    }
                }
            }   
        }
    }
}