Cod sursa(job #1428953)

Utilizator robx12lnLinca Robert robx12ln Data 5 mai 2015 13:00:06
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include<fstream>
using namespace std;
ifstream fin("suma4.in");
ofstream fout("suma4.out");
int a[55][55][55];
int n,i,j,k,nr,ii,x,niv;
int b[55][55][55];
void set(){
    for(niv=1;niv<=k;niv++){
        for(i=1;i<=niv;i++){
            for(j=1;j<=niv;j++){
                b[i][j][niv]=200000000;
            }
        }
    }
    return ;
}
short c[3][55*55*55];
int di[]={ 0,0,1,1};
int dj[]={ 0,1,0,1};
int dn[]={ 1,1,1,1};
int min(int a,int b){
    if(a>b) a=b;
    return a;
}
void LEE(){
    int p=1;
    int u=1;
    c[0][1]=1;
    c[1][1]=1;
    c[2][1]=1;
    b[1][1][1]=a[1][1][1];
    int ic,jc,nc,iv,nv,jv,d;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        nc=c[2][p];
        for(d=0;d<=3;d++){
            iv=di[d]+ic;
            jv=dj[d]+jc;
            nv=dn[d]+nc;
            if(iv>0 && iv<=nv && jv>0 && jv<=nv && nv<=k){
                u++;
                c[0][u]= iv;
                c[1][u]= jv;
                c[2][u]= nv;
                b[iv][jv][nv] = min( b[ic][jc][nc]+a[iv][jv][nv] , b[iv][jv][nv] );
            }
        }
        p++;
    }
    return ;
}
int val(){
    int i,j,minim=2000000000;
    for(i=1;i<=k;i++){
        for(j=1;j<=k;j++){
            minim=min(minim,b[i][j][k]);
        }
    }
    return minim;
}
int main(){
    fin>>n;
    i=1;
    j=1;
    k=1;
    nr=1;
    for(ii=1;ii<=n;ii++){
        fin>>x;
        a[i][j][k]=x;
        nr++;
        if(nr>k*k){
            k++;
            nr=1;
            i=j=1;
        }else{
            j++;
            if(j>k){
                i++;
                j=1;
            }
        }
    }
    k--;
    fout<<k<<" ";
    set();
    LEE();
    fout<<val()<<"\n";
    return 0;
}