Cod sursa(job #1356986)
| Utilizator | Data | 23 februarie 2015 18:07:41 | |
|---|---|---|---|
| Problema | Jocul Flip | Scor | 30 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.79 kb |
#include <iostream>
#include <fstream>
using namespace std;
int a[17][17];
bool p1[17],p2[17];
int n,m,maxim=-999999;
void eval()
{
int i,j,curent=0;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (p1[i]^p2[j])
{
curent-=a[i][j];
}
else
{
curent+=a[i][j];
}
}
}
if (curent>maxim)
{
maxim=curent;
}
}
void rez2(int k)
{
int i,negativ=0,pozitiv=0;
if (k>m)
{
eval();
}
else
{
for (i=1;i<=n;i++)
{
if (p1[i]==0)
{
if (a[i][k]<0)
{
negativ+=-a[i][k];
}
else
{
pozitiv+=a[i][k];
}
}
else
{
if (a[i][k]<0)
{
pozitiv+=a[i][k];
}
else
{
negativ+=-a[i][k];
}
}
}
if (pozitiv>negativ)
{
rez2(k+1);
}
else
{
p2[k]=1;
rez2(k+1);
}
}
}
void rez1(int k)
{
if (k>n)
{
rez2(1);
}
else
{
p1[k]=0;
rez1(k+1);
p1[k]=1;
rez1(k+1);
}
}
int main()
{
ifstream in("flip.in");
ofstream out("flip.out");
int i,j;
in>>n;
in>>m;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
in>>a[i][j];
}
}
rez1(1);
out<<maxim;
}
