Pagini recente » Cod sursa (job #1854869) | Cod sursa (job #205646) | Cod sursa (job #1719797) | Cod sursa (job #2841388)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[58][58][58], s[58][58][58], n, m;
ofstream out ("scmax.out");
int niveluri(int n)
{
int i = 1;
while(n)
{
n-=i*i;
++i;
}
return i - 1;
}
void citire()
{
ifstream in ("scmax.in");
in >> n;
m = niveluri(n);
out << m << " ";
for(int i=1; i<=m; i++)
for(int j=1; j<=i; j++)
for(int k=1; k<=i; k++)
{
in >> a[i][j][k];
if(i == m)
s[i][j][k] = a[i][j][k];
}
in.close();
}
void sol()
{
struct
{
int i,j,k,ko;
} pozm, poza;
for(int i=m-1; i>=1; i--)
for(int j=1; j<=i; j++)
for(int k=1; k<=i; k++)
s[i][j][k] = a[i][j][k] + min(s[i+1][j][k], min(s[i+1][j+1][k], min (s[i+1][j+1][k+1], s[i+1][j][k+1])));
out << s[1][1][1] << endl;
pozm.i = 1, pozm.j = 1, pozm.k = 1;
int ko = 1, mini;
out << ko << " ";
for(int i=2; i<=m; i++)
{
mini = INT_MAX;
for(int j=1; j<=i; j++)
for(int k=1; k<=i; k++)
{
++ko;
if(mini > s[i][j][k] && pozm.i + 1 == i && (pozm.j == j || pozm.j + 1 == j) && (pozm.k == k || pozm.k == k-1))
{
poza.i = i, poza.j = j, poza.k = k, poza.ko = ko;
mini = s[i][j][k];
}
}
pozm.i = poza.i, pozm.j = poza.j, pozm.k = poza.k;
out << poza.ko << " ";
}
}
void afisare()
{
out.close();
}
int main()
{
citire();
sol();
afisare();
return 0;
}