251692026-02-18 10:38:44Leventusz09Maximális összegű útcpp17Hibás válasz 5/100192ms6216 KiB
#include <iostream>
#include <vector>
#define DEBUG false
#define int long long

#define IC for(int c=0; c<2; 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
1Hibás válasz1ms316 KiB
2Elfogadva1ms316 KiB
subtask20/4
3Elfogadva1ms316 KiB
4Elfogadva1ms348 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Hibás válasz1ms316 KiB
subtask30/7
8Elfogadva1ms316 KiB
9Elfogadva1ms348 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Hibás válasz1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Hibás válasz1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
19Hibás válasz1ms316 KiB
20Hibás válasz1ms340 KiB
21Hibás válasz2ms316 KiB
22Hibás válasz2ms316 KiB
23Hibás válasz2ms408 KiB
24Elfogadva2ms316 KiB
25Elfogadva2ms316 KiB
26Hibás válasz2ms316 KiB
27Hibás válasz2ms316 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms348 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Hibás válasz1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva1ms316 KiB
36Hibás válasz1ms316 KiB
37Elfogadva1ms316 KiB
38Elfogadva1ms316 KiB
39Hibás válasz1ms316 KiB
40Hibás válasz1ms340 KiB
41Hibás válasz2ms316 KiB
42Hibás válasz2ms316 KiB
43Hibás válasz2ms408 KiB
44Elfogadva2ms316 KiB
45Elfogadva2ms316 KiB
46Hibás válasz2ms316 KiB
47Hibás válasz2ms316 KiB
48Elfogadva4ms820 KiB
49Elfogadva4ms820 KiB
50Hibás válasz4ms820 KiB
51Elfogadva4ms828 KiB
52Hibás válasz4ms772 KiB
53Hibás válasz4ms820 KiB
54Hibás válasz6ms820 KiB
55Hibás válasz6ms796 KiB
56Hibás válasz8ms940 KiB
57Hibás válasz8ms792 KiB
58Elfogadva8ms820 KiB
59Elfogadva8ms764 KiB
60Hibás válasz8ms820 KiB
61Hibás válasz8ms820 KiB
subtask55/5
62Elfogadva1ms316 KiB
63Elfogadva1ms552 KiB
64Elfogadva101ms6052 KiB
65Elfogadva101ms6160 KiB
66Elfogadva167ms6112 KiB
67Elfogadva158ms5684 KiB
68Elfogadva173ms6196 KiB
subtask60/12
69Hibás válasz1ms316 KiB
70Elfogadva1ms316 KiB
71Elfogadva104ms6196 KiB
72Elfogadva103ms6208 KiB
73Elfogadva172ms5940 KiB
74Elfogadva158ms5656 KiB
75Elfogadva178ms6152 KiB
subtask70/54
76Hibás válasz1ms512 KiB
77Elfogadva1ms316 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms348 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Hibás válasz1ms316 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms316 KiB
85Elfogadva1ms316 KiB
86Hibás válasz1ms316 KiB
87Elfogadva1ms316 KiB
88Elfogadva1ms316 KiB
89Hibás válasz1ms316 KiB
90Hibás válasz1ms340 KiB
91Hibás válasz2ms316 KiB
92Hibás válasz2ms316 KiB
93Hibás válasz2ms408 KiB
94Elfogadva2ms316 KiB
95Elfogadva2ms316 KiB
96Hibás válasz2ms316 KiB
97Hibás válasz2ms316 KiB
98Elfogadva4ms820 KiB
99Elfogadva4ms820 KiB
100Hibás válasz4ms820 KiB
101Elfogadva4ms828 KiB
102Hibás válasz4ms772 KiB
103Hibás válasz4ms820 KiB
104Hibás válasz6ms820 KiB
105Hibás válasz6ms796 KiB
106Hibás válasz8ms940 KiB
107Hibás válasz8ms792 KiB
108Elfogadva8ms820 KiB
109Elfogadva8ms764 KiB
110Hibás válasz8ms820 KiB
111Hibás válasz8ms820 KiB
112Elfogadva1ms316 KiB
113Elfogadva1ms552 KiB
114Elfogadva101ms6052 KiB
115Elfogadva101ms6160 KiB
116Elfogadva167ms6112 KiB
117Elfogadva158ms5684 KiB
118Elfogadva173ms6196 KiB
119Hibás válasz1ms316 KiB
120Elfogadva1ms316 KiB
121Elfogadva104ms6196 KiB
122Elfogadva103ms6208 KiB
123Elfogadva172ms5940 KiB
124Elfogadva158ms5656 KiB
125Elfogadva178ms6152 KiB
126Hibás válasz1ms316 KiB
127Hibás válasz1ms508 KiB
128Hibás válasz116ms6216 KiB
129Hibás válasz119ms6152 KiB
130Hibás válasz185ms6108 KiB
131Hibás válasz173ms5632 KiB
132Elfogadva177ms6152 KiB
133Hibás válasz175ms6196 KiB
134Hibás válasz182ms6196 KiB
135Hibás válasz184ms6032 KiB
136Hibás válasz192ms6056 KiB