8.2 Introducción a la estrategia codiciosa y los problemas de pago de monedas

 

 

 

cuestión Coin
1 yuanes, 5 yuanes, 10 yuanes, 50 yuanes, 100 yuanes, 500 monedas yuanes cada uno C1, C5, C10, C50, C100, C500 piezas.
Ahora utilizar estas monedas a pagar un yuan, requiere un número mínimo de piezas ? la moneda
asumir esta pregunta hay por lo menos un sistema de pago.

0≤ci≤10 ^ 9

0≤A≤10 ^ 9

de entrada:
la primera línea tiene seis cifras, que representan pequeñas a grandes seis tipos de monedas de valor nominal del número de
segundos Comportamiento A, representa la

muestra de A yuan a pagar :
entrada
3 2 1 3 0 2
620

salida
6
Descripción: 1500 + 250 + 110 + 25, un total de 6

Idea:
Mire lo mejor frente a usted, cada vez que se actualiza el número total de recursiones menos el valor nominal máximo de la cantidad de monedas * el valor nominal máximo, la actualización del subíndice del valor nominal máximo.

1  import java.util.Scanner;
 2  
3  public  class Ocho_2 Introducción a la estrategia codiciosa y al problema de pago de monedas {
 4      static  int [] cnts = new  int [6 ];
 5      static  int [] monedas = {1,5,10,50,100,500 } ;
 6  
7      public  static  void main (String [] args) {
 8          Scanner in = new Scanner (System.in);
 9          
10          for ( int i = 0; i <6; i ++ ) {
 11              cnts [i] = in. nextInt ();
 12         }
 13          int A = in.nextInt ();
 14          int res = f (A, 5 );
 15          System.out.println (res);
 16      }
 17  
18      / ** 
19       * Intenta usar denominaciones grandes primero, porque no necesitas grandes Si usa más denominaciones pequeñas, no obtendrá la solución óptima
 20       * Las denominaciones proporcionadas por las monedas
 21       * cnts El número de monedas con denominaciones en la mano
 22       * A El número total de pagos
 23       * cur Primer punto a la mayor denominación de monedas
 24       * / 
25      private  static  int f ( int A, int cur) {
 26          if (A <= 0 )
 27              return0 ;
 28          if (cur == 0 )
 29              devuelve A;
 30          
31          int coinValue = monedas [cur];
 32          int x = A / coinValue; // Cuánto coinValue 
33          int cnt = cnts [cur]; // Cuando la moneda con el valor anterior tiene cnt 
34          int t = Math.min (x, cnt);
 35          devuelve t + f (At * coinValue, cur-1 );
 36          
37      }
 38 }

 

Supongo que te gusta

Origin www.cnblogs.com/z1110/p/12704507.html
Recomendado
Clasificación