250142026-02-17 12:40:52Leventusz09Maximális összegű útcpp17Hibás válasz 9/100834ms6244 KiB
#include <iostream>
#include <vector>
#define DEBUG false
#define int long long

#define IC for(int c=0; c<500; c++)

using namespace std;

signed main(){
    int N, M;
    cin >> N >> M;

    int A[N][M];
    for(int i=0; i<N; i++) for(int j=0; j<M; j++) cin >> A[i][j];
    int C[N][M];
    for(int i=0; i<N; i++) for(int j=0; j<M; j++){
        cin >> C[i][j];
        C[i][j]--;
    }

    //int L[N][M][500];
    int o = A[0][0];
    int LR[M][500];
    int LN[500];
    for(int i=0; i<M; i++) IC LR[i][c] = 0;

    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++){
            IC{
                if(i == 0 && j == 0){
                    LN[c] = 0;
                    if(C[0][0] == c) LN[c] = A[0][0];
                    LR[0][c] = LN[c];
                }else
                if(i == 0){
                    if(LN[c] > 0){
                        LN[c] += A[i][j];
                    }else{
                        LN[c] = A[i][j];
                    }

                    LR[j][c] = LN[c];
                }
                else if(j==0){
                    if(LR[0][c] > 0){
                        LN[c] = LR[0][c] + A[i][j];
                    }else{
                        LN[c] = A[i][j];
                    }

                    LR[j][c] = LN[c];
                }else{
                    int lu = LR[j][c];
                    int ll = LN[c];
                    if(lu < 0 && ll < 0){
                        if(C[i][j] == c){
                            LN[c] = LR[j][c] = A[i][j];
                        }else{
                            LN[c] = LR[j][c] = max(lu, ll) + A[i][j];
                        }
                    }else LN[c] = LR[j][c] = max(lu, ll) + A[i][j];
                }

                if(C[i][j] == c) if(LN[c] > o) o = LN[c];
            }
        }
    }
    
    
    
    /*// bal felső sarok
    int LL[M][500];
    int LN[500];
    int o=A[0][0];


    IC LC[0][c] = 0;
    IC LL[0][c] = 0;
    LN[C[0][0]] = A[0][0];

    // első sor
    for(int i=1; i<M; i++){
        IC{
            if(LN[c] > 0 || C[0][i] == c){
                LN[c] += A[0][i];
            }else{
                LN[c] = 0;
            }

            if(C[0][i] == c) if(LN[c] > o) o = LN[c];

            LL[i][c] = LN[c];
        }
    }
    
    //első oszlop
    IC LN[c] = 0;
    LN[C[0][0]] = A[0][0];
    for(int i=1; i<N; i++){
        IC{
            if(LN[c] > 0 || C[i][0] == c){
                LN[c] += A[i][0];
            }else{
                LN[c] = 0;
            }

            if(C[i][0] == c) if(LN[c] > o) o = LN[c];

            LC[i][c] = LN[c];
        }
    }

    // az összes többi
    for(int i=1; i<N; i++){
        for(int j=1; j<M; j++){
            IC{
                int cu = L[i-1][j][c];
                int cl = L[i][j-1][c];
                if(cu < 0 && cl < 0){
                    if(C[i][j] == c) L[i][j][c] = A[i][j];
                    else L[i][j][c] = max(cu, cl) + A[i][j];
                }
                else L[i][j][c] = max(cu, cl) + A[i][j];

                if(C[i][j] == c) if(L[i][j][c] > o) o = L[i][j][c];
            }
        }
    }*/
    #if DEBUG
    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++){
            IC{
                cout << L[i][j][c] << ".";
            }
            cout << "\t";
        }
        cout << "\n";
    }

    #endif
    cout << o << endl;
    
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms500 KiB
subtask24/4
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms388 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
subtask30/7
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms388 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms508 KiB
14Elfogadva2ms316 KiB
15Elfogadva4ms500 KiB
16Elfogadva1ms316 KiB
17Elfogadva2ms440 KiB
18Elfogadva4ms316 KiB
19Hibás válasz2ms500 KiB
20Hibás válasz2ms332 KiB
21Hibás válasz4ms500 KiB
22Hibás válasz4ms536 KiB
23Hibás válasz4ms316 KiB
24Elfogadva4ms408 KiB
25Hibás válasz4ms316 KiB
26Hibás válasz4ms316 KiB
27Hibás válasz4ms316 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms388 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms508 KiB
34Elfogadva2ms316 KiB
35Elfogadva4ms500 KiB
36Elfogadva1ms316 KiB
37Elfogadva2ms440 KiB
38Elfogadva4ms316 KiB
39Hibás válasz2ms500 KiB
40Hibás válasz2ms332 KiB
41Hibás válasz4ms500 KiB
42Hibás válasz4ms536 KiB
43Hibás válasz4ms316 KiB
44Elfogadva4ms408 KiB
45Hibás válasz4ms316 KiB
46Hibás válasz4ms316 KiB
47Hibás válasz4ms316 KiB
48Elfogadva30ms820 KiB
49Elfogadva30ms1012 KiB
50Elfogadva30ms940 KiB
51Elfogadva30ms820 KiB
52Elfogadva30ms820 KiB
53Hibás válasz30ms944 KiB
54Hibás válasz32ms1016 KiB
55Hibás válasz32ms948 KiB
56Hibás válasz32ms820 KiB
57Hibás válasz32ms820 KiB
58Elfogadva34ms820 KiB
59Hibás válasz34ms1016 KiB
60Hibás válasz34ms1012 KiB
61Hibás válasz35ms948 KiB
subtask55/5
62Elfogadva1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva754ms6196 KiB
65Elfogadva754ms6200 KiB
66Elfogadva787ms5876 KiB
67Elfogadva740ms5520 KiB
68Elfogadva819ms6196 KiB
subtask60/12
69Elfogadva2ms316 KiB
70Elfogadva2ms316 KiB
71Hibás válasz755ms6196 KiB
72Elfogadva757ms6072 KiB
73Hibás válasz787ms5940 KiB
74Elfogadva741ms5680 KiB
75Elfogadva819ms6200 KiB
subtask70/54
76Elfogadva1ms800 KiB
77Elfogadva1ms316 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms388 KiB
81Elfogadva1ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva1ms508 KiB
84Elfogadva2ms316 KiB
85Elfogadva4ms500 KiB
86Elfogadva1ms316 KiB
87Elfogadva2ms440 KiB
88Elfogadva4ms316 KiB
89Hibás válasz2ms500 KiB
90Hibás válasz2ms332 KiB
91Hibás válasz4ms500 KiB
92Hibás válasz4ms536 KiB
93Hibás válasz4ms316 KiB
94Elfogadva4ms408 KiB
95Hibás válasz4ms316 KiB
96Hibás válasz4ms316 KiB
97Hibás válasz4ms316 KiB
98Elfogadva30ms820 KiB
99Elfogadva30ms1012 KiB
100Elfogadva30ms940 KiB
101Elfogadva30ms820 KiB
102Elfogadva30ms820 KiB
103Hibás válasz30ms944 KiB
104Hibás válasz32ms1016 KiB
105Hibás válasz32ms948 KiB
106Hibás válasz32ms820 KiB
107Hibás válasz32ms820 KiB
108Elfogadva34ms820 KiB
109Hibás válasz34ms1016 KiB
110Hibás válasz34ms1012 KiB
111Hibás válasz35ms948 KiB
112Elfogadva1ms316 KiB
113Elfogadva1ms316 KiB
114Elfogadva754ms6196 KiB
115Elfogadva754ms6200 KiB
116Elfogadva787ms5876 KiB
117Elfogadva740ms5520 KiB
118Elfogadva819ms6196 KiB
119Elfogadva2ms316 KiB
120Elfogadva2ms316 KiB
121Hibás válasz755ms6196 KiB
122Elfogadva757ms6072 KiB
123Hibás válasz787ms5940 KiB
124Elfogadva741ms5680 KiB
125Elfogadva819ms6200 KiB
126Hibás válasz1ms316 KiB
127Hibás válasz2ms440 KiB
128Hibás válasz771ms6200 KiB
129Hibás válasz771ms6064 KiB
130Hibás válasz805ms5956 KiB
131Hibás válasz754ms5532 KiB
132Elfogadva820ms6196 KiB
133Hibás válasz820ms6096 KiB
134Hibás válasz827ms6244 KiB
135Hibás válasz829ms6116 KiB
136Hibás válasz834ms6244 KiB