Pagini recente » Cod sursa (job #2381713) | Cod sursa (job #3169279) | Cod sursa (job #2218763) | Cod sursa (job #2452188) | Cod sursa (job #1335750)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
// adresa: http://www.infoarena.ro/problema/flip
//deci jocul de flip: ai un tabel cu valori definit pe m randuri si n coloane
//valorile de pe fiecare rand si de pe fiecare coloana pot fi inmultite cu -1
// cu scopul de a obtine cea mai mare suma posibila a tabelului si sa o afisam
int main()
{ //pentru a rezolva pb m-am gandit sa verificam ce randuri si ce coloane vom inmulti cu -1 si care cu 1
// si sa pastram valuarea intr-un vector astfel ca la final fiecare valuare din tabel va fi inmultita cu vectorii corespunzatori
// randului si coloanei din care fac parte si abia apoi adunati intr-o suma finala
int n,m , v[16][16], r[16], c[16], i, e, s, sn, smax,a ;
a=-1;
f>>n>>m; //citim n si m
//vom citi valorile din tabel folosind o matrice:
for(i=1; i<=m; i++)
{
s=0; //initializam o suma pentru valorile dintr-un rand
for(e=1; e<=n; e++)
{
f>> v[i][e] ; // citim valorile din fisier
s=s+v[i][e]; // si in acelasi timp adunam fiecare valuare de pe rand la suma
}
sn=a*s; //vedem care este valuarea sumei negative
//vedem daca randul va fi inmultit cu 1 sau cu -1 si pastram acest lucru intr-un vector
if (s>sn)
r[e]=1;
else
r[e]=-1;
}
//am stabilit care randuri vor fi inmultite cu unu si care cu minus unu
//acum vom stabili care coloane vor fi inmultite cu 1 si care cu -1
//vom proceda ca in cazul randurilor doar ca de aceasta data nu vom mai citi valorile
//si diferenta va fi ca primul for va fi cu variabila e (pt ca acesta trebuie sa fie constant, el definind coloana )
for(e=1; e<=n; e++)
{
s=0;
for(i=1; i<=m; i++)
{
s=s+v[i][e]; //adunam vectorii din coloana la suma
}
sn=a*s;
if(s>sn) c[i]=1;
else c[i]=-1;
}
//pasul urmator consta in a calcula valuarea sumei maxime
smax=0;
for(i=1;i<=m; i++)
{
for(e=1; e<=n; e++)
{
v[i][e]=v[i][e]*r[e]*c[i]; //stabilim valuarea finala din casuta tabelului
smax=smax+v[i][e]; //adunam valuarea la suma
}
}
g<<smax; //afisam suma
f.close();
g.close();
return 0;
}