251702026-02-18 10:39:32Leventusz09Maximális összegű útcpp17Hibás válasz 9/100856ms6452 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{
                        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
2Elfogadva1ms316 KiB
subtask24/4
3Elfogadva1ms332 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
subtask30/7
8Elfogadva1ms332 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms332 KiB
14Elfogadva1ms444 KiB
15Elfogadva3ms500 KiB
16Hibás válasz1ms508 KiB
17Elfogadva1ms316 KiB
18Elfogadva4ms316 KiB
19Elfogadva1ms316 KiB
20Hibás válasz1ms316 KiB
21Elfogadva4ms484 KiB
22Elfogadva4ms316 KiB
23Elfogadva4ms416 KiB
24Elfogadva4ms316 KiB
25Elfogadva4ms316 KiB
26Elfogadva4ms316 KiB
27Hibás válasz4ms316 KiB
subtask40/18
28Elfogadva1ms332 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms332 KiB
34Elfogadva1ms444 KiB
35Elfogadva3ms500 KiB
36Hibás válasz1ms508 KiB
37Elfogadva1ms316 KiB
38Elfogadva4ms316 KiB
39Elfogadva1ms316 KiB
40Hibás válasz1ms316 KiB
41Elfogadva4ms484 KiB
42Elfogadva4ms316 KiB
43Elfogadva4ms416 KiB
44Elfogadva4ms316 KiB
45Elfogadva4ms316 KiB
46Elfogadva4ms316 KiB
47Hibás válasz4ms316 KiB
48Elfogadva28ms948 KiB
49Elfogadva28ms820 KiB
50Elfogadva29ms944 KiB
51Elfogadva29ms944 KiB
52Elfogadva29ms940 KiB
53Elfogadva29ms820 KiB
54Elfogadva37ms944 KiB
55Elfogadva37ms836 KiB
56Hibás válasz37ms1004 KiB
57Hibás válasz37ms916 KiB
58Elfogadva32ms820 KiB
59Elfogadva32ms820 KiB
60Hibás válasz32ms820 KiB
61Hibás válasz39ms712 KiB
subtask55/5
62Elfogadva1ms512 KiB
63Elfogadva1ms316 KiB
64Elfogadva703ms6196 KiB
65Elfogadva703ms6196 KiB
66Elfogadva745ms5968 KiB
67Elfogadva699ms5460 KiB
68Elfogadva776ms6196 KiB
subtask60/12
69Hibás válasz1ms316 KiB
70Elfogadva2ms316 KiB
71Elfogadva705ms6196 KiB
72Elfogadva704ms6452 KiB
73Elfogadva749ms5940 KiB
74Elfogadva703ms5680 KiB
75Elfogadva777ms6196 KiB
subtask70/54
76Elfogadva1ms316 KiB
77Elfogadva1ms316 KiB
78Elfogadva1ms332 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva1ms332 KiB
84Elfogadva1ms444 KiB
85Elfogadva3ms500 KiB
86Hibás válasz1ms508 KiB
87Elfogadva1ms316 KiB
88Elfogadva4ms316 KiB
89Elfogadva1ms316 KiB
90Hibás válasz1ms316 KiB
91Elfogadva4ms484 KiB
92Elfogadva4ms316 KiB
93Elfogadva4ms416 KiB
94Elfogadva4ms316 KiB
95Elfogadva4ms316 KiB
96Elfogadva4ms316 KiB
97Hibás válasz4ms316 KiB
98Elfogadva28ms948 KiB
99Elfogadva28ms820 KiB
100Elfogadva29ms944 KiB
101Elfogadva29ms944 KiB
102Elfogadva29ms940 KiB
103Elfogadva29ms820 KiB
104Elfogadva37ms944 KiB
105Elfogadva37ms836 KiB
106Hibás válasz37ms1004 KiB
107Hibás válasz37ms916 KiB
108Elfogadva32ms820 KiB
109Elfogadva32ms820 KiB
110Hibás válasz32ms820 KiB
111Hibás válasz39ms712 KiB
112Elfogadva1ms512 KiB
113Elfogadva1ms316 KiB
114Elfogadva703ms6196 KiB
115Elfogadva703ms6196 KiB
116Elfogadva745ms5968 KiB
117Elfogadva699ms5460 KiB
118Elfogadva776ms6196 KiB
119Hibás válasz1ms316 KiB
120Elfogadva2ms316 KiB
121Elfogadva705ms6196 KiB
122Elfogadva704ms6452 KiB
123Elfogadva749ms5940 KiB
124Elfogadva703ms5680 KiB
125Elfogadva777ms6196 KiB
126Elfogadva1ms316 KiB
127Hibás válasz2ms508 KiB
128Hibás válasz792ms6064 KiB
129Elfogadva787ms6248 KiB
130Hibás válasz824ms5940 KiB
131Hibás válasz774ms5596 KiB
132Elfogadva777ms6196 KiB
133Elfogadva777ms6196 KiB
134Hibás válasz787ms6272 KiB
135Elfogadva794ms6064 KiB
136Elfogadva856ms6196 KiB