183132025-10-18 23:52:13ercseferencDinamitcpp17Hibás válasz 31/506ms3712 KiB
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
struct par{int i,j;};
int a[110][110][110],b[110][110][110];
par c[110][110][110];
int main()
{
    //ifstream ("szamok.txt");
    cin>>n>>m>>k;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)cin>>a[i][j][0];
    for(int i=0; i<=k; i++){
        for(int j=0; j<=n; j++)
            {a[j][0][i]=INT_MAX; b[j][0][i]=INT_MAX;}
        for(int j=0; j<=m; j++)
            {a[0][j][i]=INT_MAX; b[0][j][i]=INT_MAX;}
        a[0][1][i]=0; b[0][1][i]=0;
        a[1][0][i]=0; b[1][0][i]=0;}
   for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            b[i][j][0]=min(b[i-1][j][0], b[i][j-1][0])+a[i][j][0];}}
    for(int t=1; t<=k; t++){
        int utsi,utsj;
        for(int i=1; i<=n; i++){
            for(int j=1; j<=m; j++){
                int u=b[i][j][t-1]-a[i][j][t-1]+(a[i][j][t-1]/2);
                int v=min(b[i-1][j][t], b[i][j-1][t])+a[i][j][t-1];
                //cout<<u<<" "<<v<<endl;
                if(u<v){
                    a[i][j][t]=a[i][j][t-1]/2;
                    b[i][j][t]=u;
                    c[i][j][t].i=i; c[i][j][t].j=j;}
                else {
                    if(b[i-1][j][t]<b[i][j-1][t])
                        {c[i][j][t].i=c[i-1][j][t].i;
                        c[i][j][t].j=c[i-1][j][t].j;}
                    else{c[i][j][t].i=c[i][j-1][t].i;
                        c[i][j][t].j=c[i][j-1][t].j;}
                    a[i][j][t]=a[i][j][t-1];
                    b[i][j][t]=v;}}}
            utsi=c[n][m][t].i; utsj=c[n][m][t].j;
            for(int i=1; i<=n; i++){
                for(int j=0; j<=m; j++){
                    a[i][j][t]=a[i][j][t-1];
                    b[i][j][t]=b[i][j][t-1];}}
            b[utsi][utsj][t]=b[utsi][utsj][t-1]-a[utsi][utsj][t-1]+(a[utsi][utsj][t-1]/2);
            a[utsi][utsj][t]=a[utsi][utsj][t-1]/2;
            for(int j=utsj+1; j<=m; j++)b[utsi][j][t]=b[utsi][j-1][t]+a[utsi][j][t-1];
            for(int i=utsi+1; i<=n; i++)b[i][utsj][t]=b[i-1][utsj][t]+a[i][utsj][t-1];
            for(int i=utsi+1; i<=n; i++){
                for(int j=utsj+1; j<=m; j++){
                    b[i][j][t]=min(b[i-1][j][t], b[i][j-1][t])+a[i][j][t];}}
        /*cout<<utsi<<" "<<utsj<<" "<<a[utsi][utsj][0]<<endl;*/}
    /*for(int t=0; t<=k; t++){
        for(int i=1; i<=n; i++){
            for(int j=1; j<=m; j++){
                cout.width(10); cout<<b[i][j][t]<<" ";}
            cout<<endl;}
        cout<<endl<<endl;}*/
    cout<<b[n][m][k];
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base31/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/04ms3636 KiB
3Elfogadva2/23ms1956 KiB
4Elfogadva2/23ms2100 KiB
5Elfogadva3/33ms2104 KiB
6Elfogadva3/33ms2100 KiB
7Elfogadva2/24ms3712 KiB
8Elfogadva3/34ms3636 KiB
9Hibás válasz0/21ms564 KiB
10Elfogadva2/21ms756 KiB
11Elfogadva3/31ms564 KiB
12Hibás válasz0/31ms564 KiB
13Hibás válasz0/22ms1140 KiB
14Elfogadva3/32ms1388 KiB
15Hibás válasz0/24ms3636 KiB
16Hibás válasz0/34ms3712 KiB
17Hibás válasz0/24ms3544 KiB
18Elfogadva3/34ms3660 KiB
19Elfogadva2/26ms3492 KiB
20Hibás válasz0/34ms3636 KiB
21Hibás válasz0/24ms3636 KiB
22Elfogadva3/34ms3636 KiB