251542026-02-18 09:43:38Leventusz09Maximális összegű útcpp17Hibás válasz 0/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){
                    // 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(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] : 0;
                    }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
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
13Hibás válasz1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Hibás válasz1ms508 KiB
17Elfogadva1ms316 KiB
18Hibás válasz1ms316 KiB
19Hibás válasz1ms352 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms408 KiB
22Hibás válasz1ms316 KiB
23Hibás válasz2ms500 KiB
24Elfogadva2ms316 KiB
25Hibás válasz2ms316 KiB
26Hibás válasz2ms508 KiB
27Hibás válasz2ms316 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Hibás válasz1ms316 KiB
33Hibás válasz1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva1ms316 KiB
36Hibás válasz1ms508 KiB
37Elfogadva1ms316 KiB
38Hibás válasz1ms316 KiB
39Hibás válasz1ms352 KiB
40Hibás válasz1ms316 KiB
41Hibás válasz1ms408 KiB
42Hibás válasz1ms316 KiB
43Hibás válasz2ms500 KiB
44Elfogadva2ms316 KiB
45Hibás válasz2ms316 KiB
46Hibás válasz2ms508 KiB
47Hibás válasz2ms316 KiB
48Hibás válasz4ms820 KiB
49Elfogadva4ms820 KiB
50Hibás válasz4ms820 KiB
51Hibás válasz4ms820 KiB
52Hibás válasz4ms740 KiB
53Hibás válasz4ms820 KiB
54Hibás válasz6ms928 KiB
55Hibás válasz6ms772 KiB
56Hibás válasz8ms820 KiB
57Hibás válasz8ms820 KiB
58Elfogadva8ms820 KiB
59Elfogadva8ms948 KiB
60Hibás válasz8ms920 KiB
61Hibás válasz8ms820 KiB
subtask50/5
62Hibás válasz1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva101ms6072 KiB
65Elfogadva101ms6244 KiB
66Elfogadva168ms5944 KiB
67Elfogadva158ms5684 KiB
68Elfogadva174ms6192 KiB
subtask60/12
69Hibás válasz1ms316 KiB
70Elfogadva1ms508 KiB
71Hibás válasz104ms6196 KiB
72Hibás válasz105ms6040 KiB
73Hibás válasz170ms5984 KiB
74Elfogadva159ms5552 KiB
75Hibás válasz178ms6196 KiB
subtask70/54
76Hibás válasz1ms316 KiB
77Elfogadva1ms508 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Hibás válasz1ms316 KiB
83Hibás válasz1ms316 KiB
84Elfogadva1ms316 KiB
85Elfogadva1ms316 KiB
86Hibás válasz1ms508 KiB
87Elfogadva1ms316 KiB
88Hibás válasz1ms316 KiB
89Hibás válasz1ms352 KiB
90Hibás válasz1ms316 KiB
91Hibás válasz1ms408 KiB
92Hibás válasz1ms316 KiB
93Hibás válasz2ms500 KiB
94Elfogadva2ms316 KiB
95Hibás válasz2ms316 KiB
96Hibás válasz2ms508 KiB
97Hibás válasz2ms316 KiB
98Hibás válasz4ms820 KiB
99Elfogadva4ms820 KiB
100Hibás válasz4ms820 KiB
101Hibás válasz4ms820 KiB
102Hibás válasz4ms740 KiB
103Hibás válasz4ms820 KiB
104Hibás válasz6ms928 KiB
105Hibás válasz6ms772 KiB
106Hibás válasz8ms820 KiB
107Hibás válasz8ms820 KiB
108Elfogadva8ms820 KiB
109Elfogadva8ms948 KiB
110Hibás válasz8ms920 KiB
111Hibás válasz8ms820 KiB
112Hibás válasz1ms316 KiB
113Elfogadva1ms316 KiB
114Elfogadva101ms6072 KiB
115Elfogadva101ms6244 KiB
116Elfogadva168ms5944 KiB
117Elfogadva158ms5684 KiB
118Elfogadva174ms6192 KiB
119Hibás válasz1ms316 KiB
120Elfogadva1ms508 KiB
121Hibás válasz104ms6196 KiB
122Hibás válasz105ms6040 KiB
123Hibás válasz170ms5984 KiB
124Elfogadva159ms5552 KiB
125Hibás válasz178ms6196 KiB
126Hibás válasz1ms316 KiB
127Hibás válasz1ms316 KiB
128Hibás válasz119ms6260 KiB
129Hibás válasz116ms6160 KiB
130Hibás válasz184ms5924 KiB
131Hibás válasz174ms5464 KiB
132Hibás válasz180ms6196 KiB
133Hibás válasz178ms6236 KiB
134Hibás válasz185ms6240 KiB
135Hibás válasz184ms6192 KiB
136Hibás válasz192ms6208 KiB