Cod sursa(job #1363387)

Utilizator dumitrubogdanDumitru Bogdan Mihai dumitrubogdan Data 26 februarie 2015 22:20:06
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <stdio.h>

using namespace std;

    long a[17][17];
    int cx[17],cy[17];
    int x,y;
    long Smax=-9999,Sinit;

void Afisare_Gen(){
    for(int i=0; i<x; i++){
        printf("%d",cx[i]);
    }
    printf(" ");
    for(int i=0; i<y; i++){
        printf("%d",cy[i]);
    }
    printf("\n");
}

void Sum_Max(){
    int i,j,S=0;
    for(i=0;i<y;i++){
        for(j=0;j<x;j++){
            if(cx[i]!=cy[j]){
            //if(cx[j]==0 || cy[i]==0){
                S-=a[i][j];
            }
            else
                S+=a[i][j];
        }
    }
    if(S>Smax)
        Smax=S;
}

void Gen(int xsauy, int contor){
    switch (xsauy) {
        case 1 : {
            if(contor >= x){
                Gen(2,0);
            }
            else {
                cx[contor]=0;
                Gen(1,contor+1);
                cx[contor]=1;
                Gen(1,contor+1);
            }
            break;
        }
        case 2 : {
            if(contor >= y){
                Sum_Max();
                //Afisare_Gen();
            }
            else {
                cy[contor]=0;
                Gen(2,contor+1);
                cy[contor]=1;
                Gen(2,contor+1);
            }
            break;
        }
    }
}


int main()
{
    FILE *f=fopen("flip.in","r");
    FILE *g=fopen("flip.out","w");
    fscanf(f,"%d%d",&y,&x);
    for(int i=0; i<y; i++){
        for(int j=0; j<x; j++){
            fscanf(f,"%d",&a[i][j]);
            Sinit+=a[i][j];
        }
    }
    Gen(1,0);
    cout<<Smax;
    fprintf(g,"%d",Smax);
    fclose(f);
    fclose(g);
    return 0;
}