Pagini recente » Cod sursa (job #73890) | Formatare Textile | Cod sursa (job #1916640) | Cod sursa (job #156843) | Cod sursa (job #200110)
Cod sursa(job #200110)
/*filip infoarena
ideea este ca incerc sa modific liniile si coloanele astfel incat */
#include<fstream.h>
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,ok,sv_j;
long a[20][20],min,col,t_suma;
struct a
{
int i,j;
}ls_min;
void citire()
{
int i,j;
fin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fin>>a[i][j];
}
long suma_linie(long v[], int n)
{
int i;
long suma=0;
for(i=0;i<n;i++)
suma+=v[i];
return suma;
}
long suma_coloana(int c,int m)
{
int i;
long suma=0;
for(i=0;i<m;i++)
suma+=a[i][c];
return suma;
}
void bordeaza_matricea()
{
int i;
for(i=0;i<n;i++)
a[i][m]=suma_linie(a[i],m);
for(i=0;i<m;i++)
a[n][i]=suma_coloana(i,n);
}
void cauta_minim()
{
int i;
for(i=0;i<m;i++)
if(a[n][i]<min && i!=ls_min.j)
{
min=a[n][i];
sv_j=i;
}
for(i=0;i<n;i++)
if(a[i][m]<min && i!=ls_min.j)
{
col=0;
min=a[i][m];
sv_j=i;
}
if(col==1)
{
ls_min.i=n;
ls_min.j=sv_j;
}
else
{ls_min.i=m; ls_min.j=sv_j;}
}
void schimba_linie()
{
long s=0;
int i;
for(i=0;i<m;i++)
{
a[sv_j][i]*=-1;
s+=a[sv_j][i];
}
a[sv_j][m]=s;
for(i=0;i<m;i++)
a[n][i]=suma_coloana(i,n);
}
void schimba_coloana()
{
int i;
for(i=0;i<n;i++)
a[i][sv_j]*=-1;
a[n][sv_j]*=-1;
for(i=0;i<n;i++)
{ a[i][m]=suma_linie(a[i],m);
}
}
int main()
{
int i;
long t_suma_1=0;
citire();
bordeaza_matricea();
while(ok<1000)
{ok++;
col=1;
min=1000000;
sv_j=0;
cauta_minim();
if(col==0)
schimba_linie();
else
schimba_coloana();
t_suma_1=0;
for(i=0;i<m;i++)
t_suma_1+=a[n][i];
if(t_suma_1>t_suma)
t_suma=t_suma_1;
}
fout<<t_suma<<'\n';
fout.close();
return 0;
}