█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 5464

Problema 0xcb - Contar maneras de formar una cantidad con monedas

  • Autor: bryancalisto
  • Fecha: 2021-12-18 01:21:43 UTC (Hace casi 3 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.001 s 0 KBi
#2
Tiempo límite excedido
1.056 s 0 KBi
#3
Correcto
0.005 s 24 KBi
#4
Correcto
0.003 s 20 KBi
#5
Tiempo límite excedido
1.06 s 2 KBi
#6
Tiempo límite excedido
1.07 s 0 KBi
#7
Tiempo límite excedido
1.1 s 0 KBi
#8
Tiempo límite excedido
1.1 s 0 KBi
#9
Tiempo límite excedido
1.082 s 0 KBi
#10
Tiempo límite excedido
1.084 s 0 KBi
#11
Tiempo límite excedido
1.064 s 23 KBi
#12
Tiempo límite excedido
1.076 s 0 KBi
#13
Correcto
0.261 s 5 KBi
#14
Tiempo límite excedido
1.1 s 0 KBi
#15
Tiempo límite excedido
1.07 s 31 KBi
Puntos totales: 27 / 100

Código

#include <bits/stdc++.h>

using namespace std;

int contar(int cantidad, vector<int> &monedas, int index)
{
  if (cantidad == 0)
  {
    return 1;
  }
  else if (cantidad < 0 || monedas.size() == index)
  {
    return 0;
  }
  else
  {
    int restandoMoneda = contar(cantidad - monedas[index], monedas, index);
    int sinRestarMoneda = contar(cantidad, monedas, index + 1);
    return restandoMoneda + sinRestarMoneda;
  }
}

int main()
{
  int N;
  vector<int> monedas;
  int M;

  cin >> N;
  for (int i = 0; i < N; i++)
  {
    int mon;
    cin >> mon;
    monedas.push_back(mon);
  }

  cin >> M;
  while (M > 0)
  {
    int cantidad;
    cin >> cantidad;
    cout << contar(cantidad, monedas, 0) << endl;
    M--;
  }

  return 0;
}