251642026-02-18 10:13:26Leventusz09Maximális összegű útcpp17Hibás válasz 9/1001.078s6268 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){
                    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] && lu == 0 && ll == 0){
                        LN[c] = 0;
                    }else{
                        LN[c] = max(0LL, 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
1Elfogadva1ms508 KiB
2Elfogadva1ms316 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
15Elfogadva4ms408 KiB
16Hibás válasz1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva4ms536 KiB
19Elfogadva1ms316 KiB
20Hibás válasz1ms316 KiB
21Elfogadva4ms540 KiB
22Elfogadva4ms528 KiB
23Elfogadva4ms596 KiB
24Elfogadva4ms508 KiB
25Elfogadva4ms532 KiB
26Elfogadva4ms348 KiB
27Hibás válasz4ms316 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva4ms408 KiB
36Hibás válasz1ms316 KiB
37Elfogadva1ms316 KiB
38Elfogadva4ms536 KiB
39Elfogadva1ms316 KiB
40Hibás válasz1ms316 KiB
41Elfogadva4ms540 KiB
42Elfogadva4ms528 KiB
43Elfogadva4ms596 KiB
44Elfogadva4ms508 KiB
45Elfogadva4ms532 KiB
46Elfogadva4ms348 KiB
47Hibás válasz4ms316 KiB
48Elfogadva28ms948 KiB
49Elfogadva28ms972 KiB
50Elfogadva28ms960 KiB
51Elfogadva29ms940 KiB
52Elfogadva29ms948 KiB
53Elfogadva29ms820 KiB
54Elfogadva43ms820 KiB
55Elfogadva43ms948 KiB
56Hibás válasz43ms940 KiB
57Hibás válasz43ms820 KiB
58Elfogadva32ms820 KiB
59Elfogadva32ms948 KiB
60Hibás válasz32ms836 KiB
61Hibás válasz46ms836 KiB
subtask55/5
62Elfogadva1ms512 KiB
63Elfogadva2ms316 KiB
64Elfogadva703ms6196 KiB
65Elfogadva703ms6188 KiB
66Elfogadva745ms6048 KiB
67Elfogadva700ms5460 KiB
68Elfogadva776ms6032 KiB
subtask60/12
69Hibás válasz1ms316 KiB
70Elfogadva1ms320 KiB
71Elfogadva704ms6264 KiB
72Elfogadva704ms6196 KiB
73Elfogadva748ms6108 KiB
74Elfogadva702ms5664 KiB
75Elfogadva777ms6196 KiB
subtask70/54
76Elfogadva1ms508 KiB
77Elfogadva1ms500 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms316 KiB
85Elfogadva4ms408 KiB
86Hibás válasz1ms316 KiB
87Elfogadva1ms316 KiB
88Elfogadva4ms536 KiB
89Elfogadva1ms316 KiB
90Hibás válasz1ms316 KiB
91Elfogadva4ms540 KiB
92Elfogadva4ms528 KiB
93Elfogadva4ms596 KiB
94Elfogadva4ms508 KiB
95Elfogadva4ms532 KiB
96Elfogadva4ms348 KiB
97Hibás válasz4ms316 KiB
98Elfogadva28ms948 KiB
99Elfogadva28ms972 KiB
100Elfogadva28ms960 KiB
101Elfogadva29ms940 KiB
102Elfogadva29ms948 KiB
103Elfogadva29ms820 KiB
104Elfogadva43ms820 KiB
105Elfogadva43ms948 KiB
106Hibás válasz43ms940 KiB
107Hibás válasz43ms820 KiB
108Elfogadva32ms820 KiB
109Elfogadva32ms948 KiB
110Hibás válasz32ms836 KiB
111Hibás válasz46ms836 KiB
112Elfogadva1ms512 KiB
113Elfogadva2ms316 KiB
114Elfogadva703ms6196 KiB
115Elfogadva703ms6188 KiB
116Elfogadva745ms6048 KiB
117Elfogadva700ms5460 KiB
118Elfogadva776ms6032 KiB
119Hibás válasz1ms316 KiB
120Elfogadva1ms320 KiB
121Elfogadva704ms6264 KiB
122Elfogadva704ms6196 KiB
123Elfogadva748ms6108 KiB
124Elfogadva702ms5664 KiB
125Elfogadva777ms6196 KiB
126Elfogadva1ms316 KiB
127Hibás válasz2ms316 KiB
128Elfogadva1.006s6268 KiB
129Elfogadva1.006s6064 KiB
130Hibás válasz1.036s5916 KiB
131Hibás válasz978ms5656 KiB
132Elfogadva778ms6268 KiB
133Elfogadva782ms6264 KiB
134Hibás válasz796ms6196 KiB
135Elfogadva813ms6184 KiB
136Elfogadva1.078s6200 KiB