Pagini recente » Cod sursa (job #2729209) | Cod sursa (job #1408363) | Cod sursa (job #1078767) | Cod sursa (job #2730493) | Cod sursa (job #2690696)
#include <stdio.h>
#include <fstream>
using namespace std;
int a[ 21 ][ 21 ], v[ 21 ];
int suma[ 21 ], bun[ 21 ];
float rez = 999999999.0;
int n, m, x, y;
int main()
{
FILE *fin = fopen( "reteta.in", "r" );
fscanf( fin, "%d %d", &n, &m );
for( int i = 1; i <= m; i++ ){
fscanf( fin, "%d %d", &a[ i ][ 0 ], &x );
for( int j = 1; j <= x; j++ ){
fscanf( fin, "%d", &y );
++a[ i ][ y ];
}
}
for( int i = 1; i <= n; i++ )
fscanf( fin, "%d", &v[ i ] );
while( suma[ 0 ] == 0 ){
x = m;
while( suma[ x ] == 1 )
suma[ x-- ] = 0;
suma[ x ] = 1;
for( int i = 0; i < 21; i++ )
bun[ i ] = 0;
float minn = 0;
for( int i = 1; i <= m; i++ )
if( suma[ i ] == 1 ){
float s = 0;
for( int j = 1; j <= n; j++ )
if( a[ i ][ j ] ){
++bun[ j ];
s += v[ j ];
}
if( a[ i ][ 0 ] == 2 )
s /= 2.0;
minn += s;
}
int k;
for( k = 1; k <= n; k++ )
if( bun[ k ] != 1 )
k = n + 100;
if( k < n + 100 )
if( minn != 0 && rez > minn )
rez = minn;
}
FILE *fout = fopen( "reteta.out", "w" );
fprintf( fout, "%.1f\n", rez );
fclose( fout );
return 0;
}