Follows 166.c (Total 49 lines):

/* @JUDGE_ID:4461XX 166 C */
/* A */
#include<stdio.h>
#include<limits.h>
#define max 100000
int a[max] , b[max] , n[6] , money[6]={ 1 , 2 , 4 , 10 , 20 , 40 } ;
void make_a( void )
{
	long i ;
	int j ;
	a[0] = 0 ;
	for( i=1 ; i<max ; i++ )
		for( j=5 ; ; j-- )
			if( i >= money[j] ){
				a[i] = 1 + a[i-money[j]] ;
				break ;
			}
}
void make_b( int num , int total )
{
	int i , j , k , i2 , n2[6] ;
	for( i=0 ; i<=total-num ; i++ ) b[i] = 0 ;
	for( i=num , j=0 ; i<=total ; i++ , j++ ){
		for( k=0 ; k<6 ; k++ ) n2[k] = n[k] ;
		i2 = i ;
		for( k=5 ; k>=0 && i2 ; k-- )
			while( i2 >= money[k] && n2[k] ){
				b[j]++ ;
				i2 -= money[k] ;
				n2[k]-- ;
			}
		if( i2 ) b[j] = 0 ;
	}
}
void main( void ){
	int i , j , num , total , big ;
	make_a() ;
	while( 1 ){
		for( i=0 ; i<6 ; i++ ) scanf( "%d" , &n[i] ) ;
		if( !n[0] && !n[1] && !n[2] && !n[3] && !n[4] && !n[5] ) break ;
		for( i=0 , total=0 ; i<6 ; i++ ) total += money[i] * n[i] ;
		scanf( "%d.%d" , &i , &num ) ;
		num = ( i * 100 + num ) / 5 ;
		make_b( num , total ) ;
		for( i=0 , big=INT_MAX ; i<=total-num ; i++ )
			if( b[i] && a[i]+b[i] < big ) big = a[i] + b[i] ;
		printf( "%3d\n" , big ) ;
	}
}

Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com