251472026-02-18 09:21:03Leventusz09Maximális összegű útcpp17Hibás válasz 17/100173ms6272 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] : 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
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
13Elfogadva1ms336 KiB
14Elfogadva1ms316 KiB
15Elfogadva2ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
19Hibás válasz1ms500 KiB
20Hibás válasz1ms500 KiB
21Hibás válasz1ms316 KiB
22Hibás válasz2ms316 KiB
23Hibás válasz2ms316 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
26Hibás válasz2ms316 KiB
27Hibás válasz1ms316 KiB
subtask40/18
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Hibás válasz1ms316 KiB
33Elfogadva1ms336 KiB
34Elfogadva1ms316 KiB
35Elfogadva2ms316 KiB
36Elfogadva1ms316 KiB
37Elfogadva1ms316 KiB
38Elfogadva1ms316 KiB
39Hibás válasz1ms500 KiB
40Hibás válasz1ms500 KiB
41Hibás válasz1ms316 KiB
42Hibás válasz2ms316 KiB
43Hibás válasz2ms316 KiB
44Elfogadva1ms316 KiB
45Elfogadva1ms316 KiB
46Hibás válasz2ms316 KiB
47Hibás válasz1ms316 KiB
48Elfogadva4ms820 KiB
49Elfogadva4ms700 KiB
50Hibás válasz4ms768 KiB
51Elfogadva4ms712 KiB
52Hibás válasz4ms1016 KiB
53Hibás válasz4ms820 KiB
54Hibás válasz6ms820 KiB
55Hibás válasz6ms832 KiB
56Hibás válasz8ms820 KiB
57Hibás válasz8ms820 KiB
58Elfogadva8ms784 KiB
59Elfogadva8ms736 KiB
60Hibás válasz8ms820 KiB
61Hibás válasz8ms924 KiB
subtask55/5
62Elfogadva1ms512 KiB
63Elfogadva1ms316 KiB
64Elfogadva96ms6264 KiB
65Elfogadva97ms6140 KiB
66Elfogadva153ms5920 KiB
67Elfogadva143ms5460 KiB
68Elfogadva162ms6188 KiB
subtask612/12
69Elfogadva2ms316 KiB
70Elfogadva2ms316 KiB
71Elfogadva97ms6196 KiB
72Elfogadva98ms6196 KiB
73Elfogadva156ms6040 KiB
74Elfogadva144ms5496 KiB
75Elfogadva160ms6196 KiB
subtask70/54
76Hibás válasz1ms536 KiB
77Elfogadva1ms508 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Hibás válasz1ms316 KiB
83Elfogadva1ms336 KiB
84Elfogadva1ms316 KiB
85Elfogadva2ms316 KiB
86Elfogadva1ms316 KiB
87Elfogadva1ms316 KiB
88Elfogadva1ms316 KiB
89Hibás válasz1ms500 KiB
90Hibás válasz1ms500 KiB
91Hibás válasz1ms316 KiB
92Hibás válasz2ms316 KiB
93Hibás válasz2ms316 KiB
94Elfogadva1ms316 KiB
95Elfogadva1ms316 KiB
96Hibás válasz2ms316 KiB
97Hibás válasz1ms316 KiB
98Elfogadva4ms820 KiB
99Elfogadva4ms700 KiB
100Hibás válasz4ms768 KiB
101Elfogadva4ms712 KiB
102Hibás válasz4ms1016 KiB
103Hibás válasz4ms820 KiB
104Hibás válasz6ms820 KiB
105Hibás válasz6ms832 KiB
106Hibás válasz8ms820 KiB
107Hibás válasz8ms820 KiB
108Elfogadva8ms784 KiB
109Elfogadva8ms736 KiB
110Hibás válasz8ms820 KiB
111Hibás válasz8ms924 KiB
112Elfogadva1ms512 KiB
113Elfogadva1ms316 KiB
114Elfogadva96ms6264 KiB
115Elfogadva97ms6140 KiB
116Elfogadva153ms5920 KiB
117Elfogadva143ms5460 KiB
118Elfogadva162ms6188 KiB
119Elfogadva2ms316 KiB
120Elfogadva2ms316 KiB
121Elfogadva97ms6196 KiB
122Elfogadva98ms6196 KiB
123Elfogadva156ms6040 KiB
124Elfogadva144ms5496 KiB
125Elfogadva160ms6196 KiB
126Hibás válasz1ms508 KiB
127Hibás válasz1ms316 KiB
128Hibás válasz109ms6272 KiB
129Hibás válasz111ms6044 KiB
130Hibás válasz167ms5940 KiB
131Hibás válasz157ms5624 KiB
132Elfogadva163ms6060 KiB
133Hibás válasz163ms6196 KiB
134Hibás válasz166ms6196 KiB
135Hibás válasz167ms6052 KiB
136Hibás válasz173ms6196 KiB