Cod sursa(job #2210548)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 6 iunie 2018 22:51:34
Problema Elimin Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream fin("elimin.in");
ofstream fout("elimin.out");
 
int A[900][900];
struct ran{
    int ord,val;
};
 
bool cmp(ran a,ran b){
    return a.val<b.val;
}
 
ran C[900];
int R[900],I[900];
long long s=0,sf=0;
int m,n,r,c;
   
void solve(int k){
	if (k<r){
		if(k){
			for(int i = I[k-1]+1;i<m;i++){
				I[k]=i;
				solve(k+1);
			}
		} else{
			for(int i = 0;i<m;i++){
				I[k]=i;
				solve(k+1);
			}
		}
	}else{
		long long sc=s;
		for(int i = 0;i<r;i++){
		 sc-=R[I[i]];
		}
		 bool ok=true;
		 for(int i=0;i<n;i++){
	 		C[i].ord=i;
			C[i].val=0;
	 	 }
		 for(int i = 0;i<m;i++)
    	  for(int j = 0;j<n;j++){
		  ok=true;
    	  for(int k=0;k<r;k++){
		  	if(i==I[k])
			 ok=false;
		 }
			if(ok){
				C[j].val+=A[i][j];
			}
		 }
		 sort(C,C+n,cmp); 
	 	
	  	 for(int i = 0;i<c;i++)  
	        sc-=C[i].val;
		 if(sc>sf) sf=sc;
	}
}
 
int main(){
    fin>>m>>n>>r>>c; 
    for (int i = 0;i<m;i++){
        for(int j = 0;j<n;j++){
            fin>>A[i][j];
            s+=A[i][j];  
            R[i]+=A[i][j];
        }
    }

	solve(0);

    fout<<sf;
    return 0;
}