


import functools





def   _UpperCAmelCase       (     UpperCAmelCase      :			int						,	UpperCAmelCase      :			Union[str, Any]      ):
      """simple docstring"""




      if not isinstance(UpperCamelCase__						,	UpperCamelCase__      ) or not all(isinstance(UpperCamelCase__						,	UpperCamelCase__      ) for day in days      ):
            raise ValueError("""The parameter days should be a list of integers"""      )

      if len(UpperCamelCase__      ) != 3 or not all(isinstance(UpperCamelCase__						,	UpperCamelCase__      ) for cost in costs      ):
            raise ValueError("""The parameter costs should be a list of three integers"""      )

      if len(UpperCamelCase__      ) == 0:
            return 0

      if min(UpperCamelCase__      ) <= 0:
            raise ValueError("""All days elements should be greater than 0"""      )

      if max(UpperCamelCase__      ) >= 366:
            raise ValueError("""All days elements should be less than 366"""      )

      __lowerCamelCase     :      Tuple       						=						set(UpperCamelCase__      )

      @functools.cache
      def dynamic_programming(UpperCAmelCase      :			Tuple      ) -> int:
            if index > 365:
                  return 0

            if index not in days_set:
                  return dynamic_programming(index + 1      )

            return min(
                costs[0] + dynamic_programming(index + 1      )						,	costs[1] + dynamic_programming(index + 7      )						,	costs[2] + dynamic_programming(index + 30      )						,	)

      return dynamic_programming(1      )


if __name__ == "__main__":
    import doctest

    doctest.testmod()






import qiskit





def   _UpperCAmelCase       (     UpperCAmelCase      :			int						,	UpperCAmelCase      :			int      ):
      """simple docstring"""




      __lowerCamelCase     :      Dict       						=						qiskit.Aer.get_backend("""aer_simulator"""      )

      __lowerCamelCase     :      Dict       						=						qiskit.QuantumCircuit(4						,	2      )
      # encode inputs in qubits 0 and 1
      if bita == 1:
            qc_ha.x(0      )
      if bita == 1:
            qc_ha.x(1      )
      qc_ha.barrier()

      # use cnots to write XOR of the inputs on qubit2
      qc_ha.cx(0						,	2      )
      qc_ha.cx(1						,	2      )

      # use ccx / toffoli gate to write AND of the inputs on qubit3
      qc_ha.ccx(0						,	1						,	3      )
      qc_ha.barrier()

      # extract outputs
      qc_ha.measure(2						,	0      )  # extract XOR value
      qc_ha.measure(3						,	1      )  # extract AND value

      # Execute the circuit on the qasm simulator
      __lowerCamelCase     :      str       						=						qiskit.execute(UpperCAmelCase						,	UpperCAmelCase						,	shots=1_000      )

      # Return the histogram data of the results of the experiment
      return job.result().get_counts(UpperCAmelCase      )


if __name__ == "__main__":
    __UpperCamelCase    :						List[str]     =							half_adder(1, 1)
    print(F'''Half Adder Output Qubit Counts: {counts}''')



