151572025-02-14 11:09:21RRoliDinamitcpp17Hibás válasz 18/507ms1800 KiB
#include <bits/stdc++.h>
using namespace std;

struct Bencu {
    long long ert;
    long long norm;
    vector<long long> robb;
} b[100][100];

long long n, m, k, a[100][100];

void beilleszt(long long t, vector<long long> &r) {
    while(r.size() < k || t > r[0]) {
        if(r.size() == k) r[0] = t;
        else r.push_back(t);
        sort(r.begin(), r.end());
        t /= 2;
    }
}

int main() {
    cin >> n >> m >> k;
    for(long long i = 0; i < n; i++)
        for(long long j = 0; j < m; j++)
            cin >> a[i][j];
    
    b[0][0].norm = a[0][0];
    beilleszt(a[0][0], b[0][0].robb);
    long long s = 0;
    for(auto i : b[0][0].robb) s += (i-i/2);
    b[0][0].ert = b[0][0].norm - s;
    
    for(long long i = 1; i < n; i++) {
        b[i][0].norm = b[i-1][0].norm + a[i][0];
        for(auto l : b[i-1][0].robb) b[i][0].robb.push_back(l);
        beilleszt(a[i][0], b[i][0].robb);
        s = 0;
        for(auto l : b[i][0].robb) s += (l-l/2);
        b[i][0].ert = b[i][0].norm - s;
    }
    for(long long i = 1; i < m; i++) {
        b[0][i].norm = b[0][i-1].norm + a[0][i];
        for(auto l : b[0][i-1].robb) b[0][i].robb.push_back(l);
        beilleszt(a[0][i], b[0][i].robb);
        s = 0;
        for(auto l : b[0][i].robb) s += (l-l/2);
        b[0][i].ert = b[0][i].norm - s;
    }

    for(long long i = 1; i < n; i++)
        for(long long j = 1; j < m; j++) {
            long long ert1, ert2, norm1, norm2;
            vector<long long> v1, v2;

            norm1 = b[i-1][j].norm + a[i][j];
            for(auto l : b[i-1][j].robb) v1.push_back(l);
            beilleszt(a[i][j], v1);
            s = 0;
            for(auto l : v1) s += (l-l/2);
            ert1 = norm1 - s;

            norm2 = b[i][j-1].norm + a[i][j];
            for(auto l : b[i][j-1].robb) v2.push_back(l);
            beilleszt(a[i][j], v2);
            s = 0;
            for(auto l : v2) s += (l-l/2);
            ert2 = norm2 - s;

            if(ert1 <= ert2) {
                b[i][j].norm = norm1;
                b[i][j].ert = ert1;
                for(auto l : v1) b[i][j].robb.push_back(l);
            } else {
                b[i][j].norm = norm2;
                b[i][j].ert = ert2;
                for(auto l : v2) b[i][j].robb.push_back(l);
            }
        }
    
    cout << b[n-1][m-1].ert;

	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base18/50
1Elfogadva0/01ms756 KiB
2Hibás válasz0/04ms1588 KiB
3Futási hiba0/22ms820 KiB
4Futási hiba0/22ms820 KiB
5Futási hiba0/32ms820 KiB
6Futási hiba0/32ms820 KiB
7Elfogadva2/26ms1592 KiB
8Elfogadva3/37ms1608 KiB
9Hibás válasz0/22ms820 KiB
10Elfogadva2/22ms820 KiB
11Elfogadva3/32ms820 KiB
12Hibás válasz0/32ms820 KiB
13Hibás válasz0/22ms820 KiB
14Hibás válasz0/32ms912 KiB
15Hibás válasz0/26ms1428 KiB
16Hibás válasz0/34ms1588 KiB
17Elfogadva2/26ms1580 KiB
18Elfogadva3/34ms1664 KiB
19Hibás válasz0/24ms1800 KiB
20Hibás válasz0/34ms1588 KiB
21Hibás válasz0/26ms1788 KiB
22Elfogadva3/34ms1784 KiB