251422026-02-18 09:17:08Leventusz09Maximális összegű útcpp17Hibás válasz 5/100192ms6260 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){
                    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] = C[i][j] == c ? A[i][j] : 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] = C[i][j] == c ? A[i][j] : 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] = A[i][j];
                        }else{
                            LN[c] = max(lu, ll) + A[i][j];
                        }
                    //}else LN[c] = C[i][j] == c ? max(lu, ll) + A[i][j] : 0;
                    }else if(lu == 0 && ll == 0){
                        LN[c] = C[i][j] == c ? A[i][j] : LN[c] + 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
                    cout << "D" << i <<" " << j <<" "<<c<< endl;
                    #endif
                }
            }
        }

        #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
2Elfogadva1ms512 KiB
subtask20/4
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Hibás válasz1ms408 KiB
subtask30/7
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Hibás válasz1ms408 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms536 KiB
18Hibás válasz1ms316 KiB
19Hibás válasz1ms316 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms316 KiB
22Hibás válasz2ms316 KiB
23Hibás válasz2ms316 KiB
24Elfogadva2ms332 KiB
25Hibás válasz2ms316 KiB
26Hibás válasz1ms316 KiB
27Hibás válasz2ms336 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Hibás válasz1ms408 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva1ms316 KiB
36Elfogadva1ms316 KiB
37Elfogadva1ms536 KiB
38Hibás válasz1ms316 KiB
39Hibás válasz1ms316 KiB
40Hibás válasz1ms316 KiB
41Hibás válasz1ms316 KiB
42Hibás válasz2ms316 KiB
43Hibás válasz2ms316 KiB
44Elfogadva2ms332 KiB
45Hibás válasz2ms316 KiB
46Hibás válasz1ms316 KiB
47Hibás válasz2ms336 KiB
48Elfogadva4ms840 KiB
49Elfogadva4ms820 KiB
50Hibás válasz4ms948 KiB
51Hibás válasz4ms820 KiB
52Hibás válasz6ms820 KiB
53Hibás válasz6ms1012 KiB
54Hibás válasz6ms1012 KiB
55Hibás válasz6ms916 KiB
56Hibás válasz8ms708 KiB
57Hibás válasz8ms712 KiB
58Elfogadva8ms820 KiB
59Hibás válasz8ms820 KiB
60Hibás válasz8ms820 KiB
61Hibás válasz8ms820 KiB
subtask55/5
62Elfogadva1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva101ms6060 KiB
65Elfogadva103ms6040 KiB
66Elfogadva168ms6008 KiB
67Elfogadva158ms5684 KiB
68Elfogadva175ms6196 KiB
subtask60/12
69Elfogadva2ms316 KiB
70Elfogadva2ms316 KiB
71Hibás válasz104ms6188 KiB
72Hibás válasz104ms6196 KiB
73Hibás válasz168ms5976 KiB
74Hibás válasz158ms5704 KiB
75Hibás válasz178ms6056 KiB
subtask70/54
76Hibás válasz1ms316 KiB
77Elfogadva2ms316 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Hibás válasz1ms408 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms316 KiB
85Elfogadva1ms316 KiB
86Elfogadva1ms316 KiB
87Elfogadva1ms536 KiB
88Hibás válasz1ms316 KiB
89Hibás válasz1ms316 KiB
90Hibás válasz1ms316 KiB
91Hibás válasz1ms316 KiB
92Hibás válasz2ms316 KiB
93Hibás válasz2ms316 KiB
94Elfogadva2ms332 KiB
95Hibás válasz2ms316 KiB
96Hibás válasz1ms316 KiB
97Hibás válasz2ms336 KiB
98Elfogadva4ms840 KiB
99Elfogadva4ms820 KiB
100Hibás válasz4ms948 KiB
101Hibás válasz4ms820 KiB
102Hibás válasz6ms820 KiB
103Hibás válasz6ms1012 KiB
104Hibás válasz6ms1012 KiB
105Hibás válasz6ms916 KiB
106Hibás válasz8ms708 KiB
107Hibás válasz8ms712 KiB
108Elfogadva8ms820 KiB
109Hibás válasz8ms820 KiB
110Hibás válasz8ms820 KiB
111Hibás válasz8ms820 KiB
112Elfogadva1ms316 KiB
113Elfogadva1ms316 KiB
114Elfogadva101ms6060 KiB
115Elfogadva103ms6040 KiB
116Elfogadva168ms6008 KiB
117Elfogadva158ms5684 KiB
118Elfogadva175ms6196 KiB
119Elfogadva2ms316 KiB
120Elfogadva2ms316 KiB
121Hibás válasz104ms6188 KiB
122Hibás válasz104ms6196 KiB
123Hibás válasz168ms5976 KiB
124Hibás válasz158ms5704 KiB
125Hibás válasz178ms6056 KiB
126Hibás válasz1ms508 KiB
127Hibás válasz2ms316 KiB
128Hibás válasz119ms6260 KiB
129Hibás válasz120ms6236 KiB
130Hibás válasz184ms5880 KiB
131Hibás válasz173ms5684 KiB
132Hibás válasz177ms6192 KiB
133Hibás válasz177ms6208 KiB
134Hibás válasz181ms6196 KiB
135Hibás válasz182ms6200 KiB
136Hibás válasz192ms6196 KiB