250232026-02-17 13:44:00Leventusz09Maximális összegű útcpp17Hibás válasz 5/100196ms6220 KiB
#include <iostream>
#include <vector>
#define DEBUG false
#define int long long

#define IC for(int c=0; c<9; 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] : 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(lu < 0 && ll < 0){
                        if(C[i][j] == c){
                            LN[c] = LR[j][c] = A[i][j];
                        }else{
                            LN[c] = LR[j][c] = max(lu, ll) + A[i][j];
                        }
                    }else LN[c] = LR[j][c] = C[i][j] == c ? max(lu, ll) + A[i][j] : 0;
                }
                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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask20/4
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Hibás válasz1ms316 KiB
subtask30/7
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Hibás válasz1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms368 KiB
15Elfogadva2ms500 KiB
16Hibás válasz1ms316 KiB
17Hibás válasz1ms388 KiB
18Hibás válasz1ms316 KiB
19Hibás válasz1ms316 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms316 KiB
22Hibás válasz1ms372 KiB
23Hibás válasz2ms508 KiB
24Elfogadva2ms356 KiB
25Hibás válasz2ms316 KiB
26Hibás válasz2ms352 KiB
27Hibás válasz2ms508 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Hibás válasz1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms368 KiB
35Elfogadva2ms500 KiB
36Hibás válasz1ms316 KiB
37Hibás válasz1ms388 KiB
38Hibás válasz1ms316 KiB
39Hibás válasz1ms316 KiB
40Hibás válasz1ms316 KiB
41Hibás válasz1ms316 KiB
42Hibás válasz1ms372 KiB
43Hibás válasz2ms508 KiB
44Elfogadva2ms356 KiB
45Hibás válasz2ms316 KiB
46Hibás válasz2ms352 KiB
47Hibás válasz2ms508 KiB
48Elfogadva6ms1004 KiB
49Elfogadva6ms1004 KiB
50Hibás válasz6ms824 KiB
51Hibás válasz6ms820 KiB
52Hibás válasz6ms940 KiB
53Hibás válasz6ms820 KiB
54Hibás válasz6ms772 KiB
55Hibás válasz6ms736 KiB
56Hibás válasz8ms820 KiB
57Hibás válasz8ms916 KiB
58Elfogadva8ms820 KiB
59Hibás válasz8ms928 KiB
60Hibás válasz8ms1004 KiB
61Hibás válasz8ms820 KiB
subtask55/5
62Elfogadva1ms316 KiB
63Elfogadva1ms500 KiB
64Elfogadva107ms6220 KiB
65Elfogadva108ms6084 KiB
66Elfogadva173ms5888 KiB
67Elfogadva162ms5672 KiB
68Elfogadva179ms6196 KiB
subtask60/12
69Hibás válasz2ms316 KiB
70Hibás válasz1ms316 KiB
71Hibás válasz112ms6068 KiB
72Hibás válasz111ms6052 KiB
73Hibás válasz177ms5940 KiB
74Hibás válasz167ms5592 KiB
75Hibás válasz185ms6196 KiB
subtask70/54
76Elfogadva1ms316 KiB
77Elfogadva1ms316 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Hibás válasz1ms316 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms368 KiB
85Elfogadva2ms500 KiB
86Hibás válasz1ms316 KiB
87Hibás válasz1ms388 KiB
88Hibás válasz1ms316 KiB
89Hibás válasz1ms316 KiB
90Hibás válasz1ms316 KiB
91Hibás válasz1ms316 KiB
92Hibás válasz1ms372 KiB
93Hibás válasz2ms508 KiB
94Elfogadva2ms356 KiB
95Hibás válasz2ms316 KiB
96Hibás válasz2ms352 KiB
97Hibás válasz2ms508 KiB
98Elfogadva6ms1004 KiB
99Elfogadva6ms1004 KiB
100Hibás válasz6ms824 KiB
101Hibás válasz6ms820 KiB
102Hibás válasz6ms940 KiB
103Hibás válasz6ms820 KiB
104Hibás válasz6ms772 KiB
105Hibás válasz6ms736 KiB
106Hibás válasz8ms820 KiB
107Hibás válasz8ms916 KiB
108Elfogadva8ms820 KiB
109Hibás válasz8ms928 KiB
110Hibás válasz8ms1004 KiB
111Hibás válasz8ms820 KiB
112Elfogadva1ms316 KiB
113Elfogadva1ms500 KiB
114Elfogadva107ms6220 KiB
115Elfogadva108ms6084 KiB
116Elfogadva173ms5888 KiB
117Elfogadva162ms5672 KiB
118Elfogadva179ms6196 KiB
119Hibás válasz2ms316 KiB
120Hibás válasz1ms316 KiB
121Hibás válasz112ms6068 KiB
122Hibás válasz111ms6052 KiB
123Hibás válasz177ms5940 KiB
124Hibás válasz167ms5592 KiB
125Hibás válasz185ms6196 KiB
126Hibás válasz1ms500 KiB
127Hibás válasz1ms508 KiB
128Hibás válasz123ms6060 KiB
129Hibás válasz125ms6180 KiB
130Hibás válasz188ms5948 KiB
131Hibás válasz177ms5624 KiB
132Hibás válasz185ms6196 KiB
133Hibás válasz188ms6196 KiB
134Hibás válasz188ms6084 KiB
135Hibás válasz188ms6076 KiB
136Hibás válasz196ms6196 KiB