2020 21 de de marzo de Benelux algoritmo de programación Concurso 2019

E. Intercambio Eficiente

El significado de los problemas: el significado de la pregunta sencilla las preguntas; es simplemente A, B y 1 unidad 10, $ 100, $ 1,000. . . . Votos en la cantidad de papel moneda, y así toda la potencia de 10, y ahora pagan B A, que pidió el número de dinero en juego es al menos la cantidad de dinero se puede pagar.

Solución: La solución al problema del título oficial es DP + recursiva se veía desde hace mucho tiempo, comentarios en el código da su propia comprensión,

. 1 #include <la iostream>
 2 #include <stdio.h>
 3. #Include <CString>
 4.  El uso de  espacio de nombres STD;
 5.  Int DP [ 10005 ] [ 2 ]; // dp [i] [J]: Cuando como dp [i ] [0] indica el tH I-datos dígitos empujados, mientras que esto representa un valor monetario o el más bajo
 . 6                   //              DP [i] [. 1] indica los i-bits de datos para empujar, si bien representa una valor monetario del valor mínimo de los datos representados por 1
 7                   // tal, los datos 83, dp [1] [0 ] está representado por 80, y el DP de datos [1] [1] está representado por 90   
. 8  int main () {      
 . 9      Char PTR [ 100,005 ];
 10      Scanf ( " % S " , PTR + 1.);
 11      / * inicialización de datos
 12       * 0 cuando los primeros datos se empuja a la vez, cuando se indica, DP [0] [0] representa el número 0, pero esta vez, sólo necesitan ser facturas 0 lo harán representado
 13       * dp [0] [1] representa los datos de los bits 0 ª de los datos, de acuerdo con la definición anterior, los datos que representa 1, de las preguntas, que necesitamos un billete de $ 1 puede expresarlo borrar  
 14      * / 
15      DP [ 0 ] [ 0 ] = 0 ;
 16      DP [ 0 ] [ 1. ] = 1. ;
 . 17      int len = strlen (PTR + 1. );
 18 es      / * cada dato de bits que representan la cantidad de dinero tiene dos tipo de formas de pago:
 19      más que decir, lo he entendido $ 8, la primera forma es directamente a los ocho billetes de un dólar para pagar
 20                         segunda manera es dedicar $ 10 para encontrar dos $ 1 , con un total de tres notas,
21                         Estos son dos formas de dar dinero y la siguiente es para atravesar cada dígito, la mayor cantidad de dinero en el número de hojas determinado a borrar cada dígito de
 22                         después de sumar a
 23      * / 
24      para ( int i = 1 ; I <= len; i ++) { // comienzo a un ciclo a través de datos 
25          DP [I] [ 0 ] = min (DP [I- 1. ] [ 0 ] + (PTR [I] - ' 0 ' ) / * representa directamente a la * / , DP [I- 1. ] [ 1. ] + 10 - (PTR [I] - ' 0 ' ) / * por ejemplo, tengo este * / );
 26         DP [I] [ 1. = Min (DP [I-] 1. ] [ 0 ] + (PTR [I] - ' 0 ' ) + 1. , DP [I- 1. ] [ 1. ] + 10 - (PTR [I] - ' 0 ' -) 1 );
 27          / * número de datos necesarios aquí ¿por qué pagar dinero para el asiento 1 representado actualmente por Zhang? Creo que sí, aquí se trata de un proceso recursivo, cuando i == 1, que se encuentra aquí más el número mínimo de hojas momento, cuando i == 2 cuando esto se convierte en más que un aumento mínimo de 10 el número de hojas 10
 28           * calculado a través de dichas capas hacia fuera, dp [i] [0] siempre se almacena en el número mínimo requerido actualmente por hojas de dinero.
29          * / 
30      }
 31 es      tribunal << DP [len] [ 0 ] << endl;
 32      de retorno  0 ;
33 }

 

Supongo que te gusta

Origin www.cnblogs.com/blogxsc/p/12563608.html
Recomendado
Clasificación