250702026-02-17 19:35:44Pedri26Dinamitcpp17Hibás válasz 8/501ms544 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

int n, m, k, a[41][41], b[41][41], meg[41], s;
struct bencu
{
    int x;
    int y;
}vsor[16001];

/*void mbejar()
{
    int vsor2[200001], utso=0;
    //utolso++;
    for(int i=1;i<=alacsony;i++)
    {
        utso++;
        vsor2[utso]=legala[i];
    }

    while(utso>0)
    {
        int aktualis=vsor2[utso];
        s2++;
        m2[s2]=vsor2[utso];
        utso--;
        //cout<<m2[s2]<<" ";
        for(int k=elsoel[aktualis];k!=0;k=kovel[k])
        {
            fokszam[mutat[k]]--;
            //cout<<mutat[k]<<"-"<<fokszam[mutat[k]]<<endl;
            if(fokszam[mutat[k]]==0)
            {
                utso++;
                vsor2[utso]=mutat[k];
                //cout<<mutat[k];
            }
        }
    }
}*/

int main() {
    
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            b[i][j]=1e12;
        }
        //cout<<endl;
    }
    int elso=1, utolso=1;
    vsor[elso].x=1;
    vsor[elso].y=1;
    b[1][1]=0;
    while(elso<=utolso)
    {
        if(b[vsor[elso].x+1][vsor[elso].y]>b[vsor[elso].x][vsor[elso].y]+a[vsor[elso].x+1][vsor[elso].y])
        {
            b[vsor[elso].x+1][vsor[elso].y]=b[vsor[elso].x][vsor[elso].y]+a[vsor[elso].x+1][vsor[elso].y];
            utolso++;
            vsor[utolso].x=vsor[elso].x+1;
            vsor[utolso].y=vsor[elso].y;
        }
        if(b[vsor[elso].x][vsor[elso].y+1]>b[vsor[elso].x][vsor[elso].y]+a[vsor[elso].x][vsor[elso].y+1])
        {
            b[vsor[elso].x][vsor[elso].y+1]=b[vsor[elso].x][vsor[elso].y]+a[vsor[elso].x][vsor[elso].y+1];
            utolso++;
            vsor[utolso].x=vsor[elso].x;
            vsor[utolso].y=vsor[elso].y+1;
        }
        elso++;
    }
    int i=n, j=m;
    s++;
    meg[s]=a[i][j];
    while(i>1 && j>1)
    {
        if(b[i-1][j]<b[i][j-1])
        {
            s++;
            meg[s]=a[i-1][j];
            i--;
        }
        else 
        {
            s++;
            meg[s]=a[i][j-1];
            j--;
        }
    }
    s++;
    meg[s]=a[1][1];
    sort(meg+1, meg+s+1);
    /*for(int i=1;i<=s;i++)
    {
        cout<<meg[i]<<" ";
    }cout<<endl;*/
    while(k>0){
        while(k>0 && meg[s]>=meg[s-1])
        {
            meg[s]=meg[s]/2;
            k--;
        }
        sort(meg+1, meg+s+1);
        /*for(int i=1;i<=s;i++)
        {
            cout<<meg[i]<<" ";
        }
        cout<<endl;*/
    }
    int s0=0;
    for(int i=1;i<=s;i++)
    {
        s0+=meg[i];
    }
    cout<<s0;
    


    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base8/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/01ms500 KiB
3Elfogadva2/21ms316 KiB
4Hibás válasz0/21ms316 KiB
5Hibás válasz0/31ms316 KiB
6Hibás válasz0/31ms316 KiB
7Hibás válasz0/21ms316 KiB
8Hibás válasz0/31ms316 KiB
9Hibás válasz0/21ms316 KiB
10Hibás válasz0/21ms316 KiB
11Elfogadva3/31ms316 KiB
12Hibás válasz0/31ms316 KiB
13Hibás válasz0/21ms316 KiB
14Elfogadva3/31ms348 KiB
15Hibás válasz0/21ms508 KiB
16Hibás válasz0/31ms544 KiB
17Hibás válasz0/21ms316 KiB
18Hibás válasz0/31ms316 KiB
19Hibás válasz0/21ms508 KiB
20Hibás válasz0/31ms508 KiB
21Hibás válasz0/21ms316 KiB
22Hibás válasz0/31ms316 KiB