Cod sursa(job #1027194)

Utilizator invincibleInvincibilul invincible Data 12 noiembrie 2013 16:07:30
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>

int Viz[15], Viz2[15], n, m, a[20][20], r, c, Max;

inline int suma(){
    int Sum = 0;
    for(int i = 1; i <= n; ++ i)
        if(Viz[i] == 0)
            for(int j = 1; j <= m; ++ j)
                if(Viz2[j] == 0)
                    Sum += a[i][j];
    return Sum;
}

void backC(int k, int next){
    if(k == c + 1){
        int Sum = suma();
        if(Sum > Max)
            Max = Sum;
    }
    for(int i = next; i <= m; ++ i)
        if(Viz2[i] == 0){
            Viz2[i] = 1;
            backC(k + 1, i + 1);
            Viz2[i] = 0;
        }
}

void backL(int k, int next){
    if(k == r + 1)
        backC(1, 1);
    for(int i = next; i <= n; ++ i)
        if(Viz[i] == 0){
            Viz[i] = 1;
            backL(k + 1, i + 1);
            Viz[i] = 0;
        }
}

int main(){
    freopen("elimin.in", "r", stdin);
    freopen("elimin.out", "w", stdout);
    scanf("%d %d %d %d", &n, &m, &r, &c);
    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= m; ++ j)
            scanf("%d", &a[i][j]);
    backL(1, 1);
    printf("%d", Max);
}