Cod sursa(job #121639)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 9 ianuarie 2008 11:14:37
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.71 kb
#include <fstream.h>
#include <values.h>

ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long  max=MAXINT;
long n,m,l,c,auxc,auxl,lin[509],col[509],a[500][500];

void citire()
{
   fin>>n>>m>>l>>c;
      for (int i=0;i<n;i++)
	    for (int j=0;j<m;j++)
		 fin>>a[i][j];
		    fin.close();
		    }

		    void suma()
		    {
		     long long S=0;
			for (int i=0;i<n;i++)
			       if (lin[i]==1)
				  for (int j=0;j<m;j++)
					      S+=a[i][j];

						 for (int k=0;k<m;k++)
						       if (col[k]==1)
							 for (int r=0;r<n;r++)
								    if (lin[r]==0)
									       S+=a[r][k];
										if (S<max)
										    max=S;
										    }

										    void backc(int k)
										    {
											if (k==m)
											    {
												if (auxc==c)
												       suma();
													      return ;
														  }
														      if (auxc<c)
															  {
																col[k]=1;
																      auxc++;
																	    backc(k+1);
																		  col[k]=0;
																			auxc--;
																			      backc(k+1);
																				  }
																				      else
																					     backc(k+1);


																					     }

																					     void backl(int k)
																					     {
																						if (k==n)
																						   {
																						       if (auxl==l)
																							     backc(0);
																								   return ;
																								      }

																									 if (auxl<l)
																									    {
																										  lin[k]=1;
																											auxl++;
																											      backl(k+1);
																												    lin[k]=0;
																													  auxl--;
																														backl(k+1);
																														   }
																														      else
																															 {
																															       backl(k+1);
																																  }
																																  }

																																  int main()
																																  {
																																     citire();
																																	backl(0);
																																	   long Su=0;
																																		for (int i=0;i<n;i++)
																																			for (int j=0;j<m;j++)
																																				    Su+=a[i][j];
																																					 Su-=max;
																																						fout<<Su<<"\n";
																																						       fout.close();
																																							      return 0;
																																							      }