Cod sursa(job #2212413)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 13 iunie 2018 22:46:23
Problema Elimin Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

#define NMAX 1001
 
using namespace std;
 
ifstream fin("elimin.in");
ofstream fout("elimin.out");
 
long long A[NMAX][NMAX];

bool cmp (int a,int b){
 return a<b;
}
 
 
long long R[NMAX],I[NMAX],C[NMAX];
long long m,n,r,c,s=0;
   
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{
		int sc=0;
		for(int i=0;i<r;i++){
		 sc+=R[I[i]];
		}
		 for(int i=0;i<n;i++)
			C[i]=0;
		 for(int i = 0;i<r;i++)
    	  for(int j = 0;j<n;j++){
		   C[j]+=A[I[i]][j];
		  }
		 sort(C,C+n,cmp); 
	  	 for(int i=0;i<c;i++)  
	        sc-=C[i];
		 if(sc>s) s=sc;
	}
}
 
int main(){
    fin>>m>>n>>r>>c; 
	if(m<=n){
		for (int i = 0;i<m;i++){
       		for(int j = 0;j<n;j++){
       		     fin>>A[i][j];  
       		     R[i]+=A[i][j];
       		}
    	}
	}else{
		for (int i = 0;i<m;i++){
       		for(int j = 0;j<n;j++){
       		     fin>>A[j][i];  
       		     R[j]+=A[j][i];
       		}
    	}
    swap(m,n);swap(r,c);
	}	
    r=m-r;
	solve(0);
    fout<<s;
    return 0;
}