Cod sursa(job #1022018)

Utilizator Aida_SilviaStrimbeanu Aida Silvia Aida_Silvia Data 4 noiembrie 2013 17:00:45
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

#define maxn 730

using namespace std;

int m,n,r,c;

int a[maxn][maxn], aa[maxn][maxn];

int smax=0;
int viz[maxn];
int sol[maxn];
int sum[maxn];

ifstream in("elimin.in");
ofstream out("elimin.out");

void restaurare()
{
    for (int i=1; i<=m; i++)
        for (int j=1; j<=n; j++)
            aa[i][j]=a[i][j];
}

void verificare()
{
    int k=1;
    for (int i=0; i<r; i++)
        for(int j=1; j<=n; j++)
            aa[sol[i]][j]=0;

    for (int i=1; i<=m; i++)
    {
        for(int j=1; j<=n; j++)
            cout<<aa[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;

    for (int j=1; j<=n; j++)
    {
        int s=0;
        for (int i=1; i<=m; i++)
            s+=aa[i][j];
        sum[k]=s;
        k++;
    }

    for(int i=0; i<k; i++)
        cout<<sum[i]<<" ";
    cout<<endl;

     for (int i=1; i<k-1; i++)
         for (int j=i+1; j<=k-1; j++)
             if (sum[i]<sum[j])
             {
                 int aux=sum[i];
                 sum[i]=sum[j];
                 sum[j]=aux;
             }


     for (int i=1;i<k;i++)
            cout<<sum[i]<<" ";
     cout<<endl;


    int s=0;
    for (int i=1; i<k-c; i++)
       s+=sum[i];

    if (smax<s) smax=s;

    restaurare();





}


void back(int k)
{
    if (k==r)
    {
        for (int i=0; i<r; i++)
            out<<sol[i]<<" ";
        out<<endl;
        verificare();
    }
    else if (k<n)
    {
        for(int i=1; i<=m; i++)
        {

            if ((!viz[i]) && (k==0))
            {
                sol[k]=i;
                viz[i]=1;
                back(k+1);
                viz[i]--;
            }
            else if ((!viz[i]) && (sol[k-1]<i))
            {
                viz[i]=1;
                sol[k]=i;
                back(k+1);
                viz[i]=0;
            }
        }
    }
}
int main()
{
    in>>m>>n>>r>>c;

    for (int i=1; i<=m; i++)
        for (int j=1; j<=n; j++)
        {
            in>>a[i][j];
        }

    restaurare();

    fill(viz, viz+m+1,0 );

    back(0);

    out<<smax;


    return 0;
}