Pagini recente » Cod sursa (job #1102767) | Cod sursa (job #2875250) | Cod sursa (job #1047783) | Cod sursa (job #119162) | Cod sursa (job #386294)
Cod sursa(job #386294)
#include <stdio.h>
#include <values.h>
int m,n,i,j,s,j1,j2;
long min,min2;
int a[251][251];
long b[251][251];
void citire()
{
freopen("lacusta.in","r",stdin);
freopen("lacusta.out","w",stdout);
scanf("%d",&m);
scanf("%d",&n);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
}
int main()
{
citire();
b[2][1]=a[2][1];
for(j=2;j<=n;j++)
b[2][j]=a[1][1]+a[2][j]+a[1][j];
min=MAXLONG;
for(i=2;i<=n;i++)
if(min>b[2][i])
{
min=b[2][i];
j1=i;
}
min2=MAXLONG;
for(i=2;i<=n;i++)
if(min2>b[2][i] && j1!=i)
{
min2=b[2][i];
j2=i;
}
for(i=3;i<=m;i++)
{
for(j=1;j<=n;j++)
if(j!=j1)
b[i][j]=a[i][j]+min+a[i-1][j];
else
b[i][j]=a[i][j]+min2+a[i-1][j];
min=MAXLONG;
for(j=1;j<=n;j++)
if(min>b[i][j])
{
min=b[i][j];
j1=j;
}
min2=MAXLONG;
for(j=1;j<=n;j++)
if(min2>b[i][j] && j1!=j)
{
min2=b[i][j];
j2=j;
}
/* for(j=1;j<=n;j++)
printf("%d ",b[i][j]);
printf("\n");*/
}
min=MAXLONG;
for(j=1;j<n;j++)
if(min>b[m][j])
min=b[m][j];
printf("%ld",min+a[m][n]);
return 0;
}