251812026-02-18 11:47:10Leventusz09Maximális összegű útcpp17Hibás válasz 9/100857ms6284 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){
                    // bal felső sarok
                    LN[c] = 0;
                    if(C[0][0] == c) LN[c] = A[0][0];
                    LR[0][c] = LN[c];
                }else
                if(i == 0){
                    // első sor
                    if(LN[c] > 0){
                        LN[c] += A[i][j];
                    }else{
                        LN[c] = C[i][j] == c ? A[i][j] : 0;
                    }
                    
                    LR[j][c] = LN[c];
                }
                else if(j==0){
                    // első oszlop
                    if(LR[0][c] > 0){
                        LN[c] = LR[0][c] + A[i][j];
                    }else{
                        LN[c] = C[i][j] == c ? A[i][j] : 0;
                    }

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

                    LR[j][c] = LN[c];
                }
                if(C[i][j] == c) if(LN[c] > o) o = LN[c];
            }
        }

        #if DEBUG
        for(int i=0; i<M; i++){
            IC{
                cout << LR[i][c] << ".";
            }
            cout << " ";
        }
        cout << endl;
        #endif
    }

    cout << o << endl;
    
    return 0;
}

/*
3 3
1 1 1
1 1 1
1 1 1
1 2 3
4 5 6
7 8 9

*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms500 KiB
subtask24/4
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
subtask30/7
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva4ms532 KiB
16Hibás válasz1ms508 KiB
17Elfogadva1ms316 KiB
18Elfogadva3ms552 KiB
19Elfogadva1ms508 KiB
20Hibás válasz2ms316 KiB
21Elfogadva4ms532 KiB
22Elfogadva4ms724 KiB
23Elfogadva4ms316 KiB
24Elfogadva4ms316 KiB
25Elfogadva4ms316 KiB
26Elfogadva4ms528 KiB
27Hibás válasz4ms404 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva4ms532 KiB
36Hibás válasz1ms508 KiB
37Elfogadva1ms316 KiB
38Elfogadva3ms552 KiB
39Elfogadva1ms508 KiB
40Hibás válasz2ms316 KiB
41Elfogadva4ms532 KiB
42Elfogadva4ms724 KiB
43Elfogadva4ms316 KiB
44Elfogadva4ms316 KiB
45Elfogadva4ms316 KiB
46Elfogadva4ms528 KiB
47Hibás válasz4ms404 KiB
48Elfogadva29ms1004 KiB
49Elfogadva29ms952 KiB
50Elfogadva29ms1008 KiB
51Elfogadva29ms948 KiB
52Elfogadva28ms820 KiB
53Elfogadva28ms1012 KiB
54Elfogadva37ms820 KiB
55Elfogadva37ms820 KiB
56Hibás válasz37ms940 KiB
57Hibás válasz37ms836 KiB
58Elfogadva32ms820 KiB
59Elfogadva32ms944 KiB
60Hibás válasz32ms820 KiB
61Hibás válasz39ms1012 KiB
subtask55/5
62Elfogadva2ms316 KiB
63Elfogadva2ms316 KiB
64Elfogadva703ms6196 KiB
65Elfogadva703ms6212 KiB
66Elfogadva745ms6048 KiB
67Elfogadva700ms5452 KiB
68Elfogadva777ms6208 KiB
subtask60/12
69Hibás válasz2ms316 KiB
70Elfogadva1ms316 KiB
71Elfogadva704ms6196 KiB
72Elfogadva704ms6196 KiB
73Elfogadva746ms6004 KiB
74Elfogadva702ms5592 KiB
75Elfogadva777ms6204 KiB
subtask70/54
76Elfogadva1ms508 KiB
77Elfogadva1ms508 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms316 KiB
85Elfogadva4ms532 KiB
86Hibás válasz1ms508 KiB
87Elfogadva1ms316 KiB
88Elfogadva3ms552 KiB
89Elfogadva1ms508 KiB
90Hibás válasz2ms316 KiB
91Elfogadva4ms532 KiB
92Elfogadva4ms724 KiB
93Elfogadva4ms316 KiB
94Elfogadva4ms316 KiB
95Elfogadva4ms316 KiB
96Elfogadva4ms528 KiB
97Hibás válasz4ms404 KiB
98Elfogadva29ms1004 KiB
99Elfogadva29ms952 KiB
100Elfogadva29ms1008 KiB
101Elfogadva29ms948 KiB
102Elfogadva28ms820 KiB
103Elfogadva28ms1012 KiB
104Elfogadva37ms820 KiB
105Elfogadva37ms820 KiB
106Hibás válasz37ms940 KiB
107Hibás válasz37ms836 KiB
108Elfogadva32ms820 KiB
109Elfogadva32ms944 KiB
110Hibás válasz32ms820 KiB
111Hibás válasz39ms1012 KiB
112Elfogadva2ms316 KiB
113Elfogadva2ms316 KiB
114Elfogadva703ms6196 KiB
115Elfogadva703ms6212 KiB
116Elfogadva745ms6048 KiB
117Elfogadva700ms5452 KiB
118Elfogadva777ms6208 KiB
119Hibás válasz2ms316 KiB
120Elfogadva1ms316 KiB
121Elfogadva704ms6196 KiB
122Elfogadva704ms6196 KiB
123Elfogadva746ms6004 KiB
124Elfogadva702ms5592 KiB
125Elfogadva777ms6204 KiB
126Elfogadva1ms316 KiB
127Hibás válasz2ms508 KiB
128Hibás válasz791ms6268 KiB
129Elfogadva785ms6084 KiB
130Hibás válasz824ms6072 KiB
131Hibás válasz774ms5532 KiB
132Elfogadva777ms6108 KiB
133Elfogadva779ms6232 KiB
134Hibás válasz787ms6056 KiB
135Elfogadva796ms6052 KiB
136Elfogadva857ms6284 KiB