Pagini recente » Cod sursa (job #1487832) | Cod sursa (job #136637) | Istoria paginii runda/fminostress2012 | Cod sursa (job #1053766) | Cod sursa (job #1172078)
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
double x[10000][10000];
int main()
{/*Gigel a descoperit un nou joc pe care l-a numit "Flip". Acesta se joaca pe o tabla
dreptunghiulara de dimensiuni N*M care contine numere intregi. Fiecare linie si
fiecare coloana are un comutator care schimba starea tuturor elementelor de pe acea
linie sau coloana, inmultindu-le cu -1. Scopul jocului este ca pentru o configuratie
data a tablei de joc sa se actioneze asupra liniilor si coloanelor astfel incat sa
se obtina o tabla cu suma elementelor cat mai mare.
CERINTA
Dandu-se o configuratie pentru tabla "Flip", realizati un program care sa determine suma
maxima pe care Gigel o poate obtine.
DATE DE INTRARE
Prima linie a fisierului flip.in contine doua numere intregi N si M, separate prin cate
un spatiu, care reprezinta dimensiunea tablei. Urmatoarele N linii contin cate M numere
intregi seperate prin cate un spatiu care descriu configuratia tablei de joc.
DATE DE IESIRE
Prima linie a fisierului flip.out contine un numar care va reprezenta suma maxima pe
care Gigel o poate obtine comutand liniile si coloanele tablei de joc.
Restrictii si precizari
1 ≤ N, M ≤ 16
Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]
EXEMPLU
flip.in flip.out
5 3 | 28
4 -2 2 |
3 -1 5 |
2 0 -3 |
4 1 -3 |
5 -3 2 |*/
int n,m,i,j,butc,butl,s=0,sc=0,sl=0,min1=0,min2=0;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin>>x[i][j];
for(j=1;j<=m;j++)
{
sc=0;
for(i=1;i<=n;i++)
sc=sc+x[i][j];
if(sc<min1)
{
min1=sc;
butc=j;
}
}
for(i=1;i<=n;i++)
x[i][butc]=x[i][butc]*(-1);
for(i=1;i<=n;i++)
{
sl=0;
for(j=1;j<=m;j++)
sl=sl+x[i][j];
if(sl<min2)
{
min2=sl;
butl=i;
}
}
for(j=1;j<=m;j++)
x[butl][j]=x[butl][j]*(-1);
x[butl][butc]=x[butl][butc]*(-1);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
s=s+x[i][j];
fout<<s;
/*for(j=1;j<=m;j++)
for(i=1;i<=n;i++)
if(x[j][i]<=0)
{nrmin++;
y[f]=nrmin;
z[f]=j;
f++;}*/
/*for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
fout<<x[i][j]<<" ";
fout<<"\n";
}*/
return 0;
}