Cod sursa(job #750250)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 21 mai 2012 17:47:35
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
 //TEF
 # include <fstream>
 # include <cstring>
 # include <algorithm>
 
 # define dim 10005
 # define dim2 5005
 
 using namespace std;
 
 ifstream f("rucsac.in");
 ofstream g("rucsac.out");
 
 int N, G;
 int w[ dim2 ], p[ dim2 ];
 int a[ 2 ][ dim ];
 
 void citire()
 {
	 int i;
	 f >> N >> G;
	 for ( i = 1 ; i <= N ; i++ )
		 f >> w[ i ] >> p[ i ];
 }
 
 void rezolva()
 {
	 int i, j;
	 int sub = 1;
	 
	 for ( i = 1 ; i <= N ; i++ )
	 {
		 for ( j = 0 ; j <= G ; j++ )
		 {
			 if ( sub == 2 )
			 {
				 a[ sub ][ j ] = a[ sub - 1 ][ j ];
				 if ( w[ i ] <= j )
					 a[ sub ][ j ] = max( a[ sub ][ j ], a[ sub - 1 ][ j - w[ i ] ] + p[ i ] );
			 }
			 else
				 if ( sub == 1 )
				 {
					 a[ sub ][ j ] = a[ sub + 1 ][ j ];
					 if ( w[ i ] <= j )
						 a[ sub ][ j ] = max( a[ sub ][ j ], a[ sub + 1 ][ j - w[ i ] ] + p[ i ] );
				 }
		 }
		 
		 if ( sub == 1 )
			 sub++;
		 else
			 sub--;
	 }
	 
	 if ( sub == 1 )
		 sub++;
	 else
		 sub--;
	 
	 g << a[ sub ][ G ] << "\n";
 }
 
 void afisare()
 {
	 int i, j;
	 for ( i = 1 ; i <= 2 ; i++ )
	 {
		 for ( j = 0 ; j <= G ; j++ )
			 g << a[ i ][ j ] << " ";
		 g << "\n";
	 }
 }
 
 int main()
 {
	 citire();
	 rezolva();
	// afisare();
	 return 0;
 }