C++ プログラム: コイン支払いを使用して n に到達するために必要な操作の数を計算します。
N、A、B、C、D という 5 つの数字があるとします。数字の 0 から始まり N で終わります。特定のコインを使用して数値を変更することができます。具体的な操作は次のとおりです:
- 数値を 2 倍して A コインを支払います
- 数値を 3 倍して、 B コインを支払う コイン
- 数字を 5 倍し、C コインを支払う
- 数字を 1 ずつ増減し、D コインを支払う
これは任意で実行できますこれらの操作の回数と順序は任意です。 N に到達するために必要なコインの最小数を見つける必要があります
したがって、入力が N = 11、A = 1、B = 2、C = 2、D = 8 の場合、出力は 19 になります。なぜなら、最初の x は 0 だからです。
8 コインを使用して x を 1 増やします (x=1)。
1 コインを使用して x を 2 倍します (x=2)。
コイン 2 枚を使って x を 5 倍します (x=10)。
8 コインを使用して 1 増やします (x=11)。
手順
この問題を解決するには、次の手順に従います。
Define one map f for integer type key and value Define one map vis for integer type key and Boolean type value Define a function calc, this will take n if n is zero, then: return 0 if n is in vis, then: return f[n] vis[n] := 1 res := calc(n / 2) + n mod 2 * d + a if n mod 2 is non-zero, then: res := minimum of res and calc((n / 2 + 1) + (2 - n mod 2)) * d + a) res := minimum of res and calc(n / 3) + n mod 3 * d + b if n mod 3 is non-zero, then: res := minimum of res and calc((n / 3 + 1) + (3 - n mod 3)) * d + b) res := minimum of res and calc(n / 5) + n mod 5 * d + c if n mod 5 is non-zero, then: res := minimum of res and calc((n / 5 + 1) + (5 - n mod 5)) if (res - 1) / n + 1 > d, then: res := n * d return f[n] = res From the main method, set a, b, c and d, and call calc(n)
Example
よりよく理解するために、次の実装を見てみましょう。
#include <bits/stdc++.h> using namespace std; int a, b, c, d; map<long, long> f; map<long, bool> vis; long calc(long n){ if (!n) return 0; if (vis.find(n) != vis.end()) return f[n]; vis[n] = 1; long res = calc(n / 2) + n % 2 * d + a; if (n % 2) res = min(res, calc(n / 2 + 1) + (2 - n % 2) * d + a); res = min(res, calc(n / 3) + n % 3 * d + b); if (n % 3) res = min(res, calc(n / 3 + 1) + (3 - n % 3) * d + b); res = min(res, calc(n / 5) + n % 5 * d + c); if (n % 5) res = min(res, calc(n / 5 + 1) + (5 - n % 5) * d + c); if ((res - 1) / n + 1 > d) res = n * d; return f[n] = res; } int solve(int N, int A, int B, int C, int D){ a = A; b = B; c = C; d = D; return calc(N); } int main(){ int N = 11; int A = 1; int B = 2; int C = 2; int D = 8; cout << solve(N, A, B, C, D) << endl; }
入力
11, 1, 2, 2, 8
出力
19
以上がC++ プログラム: コイン支払いを使用して n に到達するために必要な操作の数を計算します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WORD は強力なワード プロセッサです。Word を使用してさまざまなテキストを編集できます。Excel の表では、足し算、引き算、乗算の計算方法をマスターしました。そのため、Word の表で数値の足し算を計算する必要がある場合は、乗数を引くにはどうすればよいですか? 計算には電卓しか使用できませんか?答えはもちろん「いいえ」です。WORD でも実行できます。今日は、Word文書の表で加算、減算、乗算、除算などの基本的な演算を数式を使って計算する方法を説明しますので、一緒に学びましょう。そこで、今日は、WORD 文書で加算、減算、乗算、除算を計算する方法を詳しく説明します。ステップ 1: WORD を開き、ツールバーの [挿入] の下にある [表] をクリックし、ドロップダウン メニューに表を挿入します。

General Matrix Multiplication (GEMM) は、多くのアプリケーションやアルゴリズムの重要な部分であり、コンピューター ハードウェアのパフォーマンスを評価するための重要な指標の 1 つでもあります。 GEMM の実装に関する徹底的な調査と最適化は、ハイ パフォーマンス コンピューティングとソフトウェア システムとハードウェア システムの関係をより深く理解するのに役立ちます。コンピューター サイエンスでは、GEMM を効果的に最適化すると、計算速度が向上し、リソースが節約されます。これは、コンピューター システムの全体的なパフォーマンスを向上させるために非常に重要です。 GEMM の動作原理と最適化方法を深く理解することは、最新のコンピューティング ハードウェアの可能性をより有効に活用し、さまざまな複雑なコンピューティング タスクに対してより効率的なソリューションを提供するのに役立ちます。 GEMMのパフォーマンスを最適化することで

Python の count() 関数を使用してリスト内の要素の数を計算する方法には、特定のコード サンプルが必要です。Python は強力で習得しやすいプログラミング言語として、さまざまなデータ構造を処理するための組み込み関数を多数提供しています。その 1 つは count() 関数で、リスト内の要素の数をカウントするために使用できます。この記事では、count()関数の使い方と具体的なコード例を詳しく説明します。 count() 関数は Python の組み込み関数であり、特定の値を計算するために使用されます。

C# には、多くの数学関数が含まれる Math クラス ライブラリがあります。これらには、累乗を計算する関数 Math.Pow が含まれており、指定された数値の累乗を計算するのに役立ちます。 Math.Pow 関数の使用法は非常に簡単で、基数と指数を指定するだけです。構文は次のとおりです: Math.Pow(base,exponent); ここで、base は基数を表し、exponent は指数を表します。この関数は double 型の結果、つまりべき乗の計算結果を返します。しましょう

2 つの文字列 str_1 と str_2 を指定します。目的は、再帰的プロシージャを使用して、文字列 str1 内の部分文字列 str2 の出現数をカウントすることです。再帰関数は、その定義内で自分自身を呼び出す関数です。 str1 が「Iknowthatyouknowthatiknow」、str2 が「know」の場合、出現回数は -3 になります。例を通して理解しましょう。たとえば、入力 str1="TPisTPareTPamTP"、str2="TP"; 出力 Countofoccurrencesofasubstringrecursi

はじめに 行列式を使用して三角形の面積を計算する Java プログラムは、3 つの頂点の座標を指定して三角形の面積を計算できる簡潔で効率的なプログラムです。このプログラムは、Java で基本的な算術および代数計算を使用する方法と、Scanner クラスを使用してユーザー入力を読み取る方法を示しているため、ジオメトリを学習または操作する人にとって役立ちます。プログラムはユーザーに三角形の 3 点の座標を入力するように要求し、その座標が読み取られて、座標行列の行列式を計算するために使用されます。行列式の絶対値を使用して面積が常に正であることを確認し、式を使用して三角形の面積を計算し、ユーザーに表示します。このプログラムは簡単に変更して、さまざまな形式での入力を受け入れたり、追加の計算を実行したりできるため、幾何学的計算のための多用途ツールになります。決定要因のランク

人気のある汎用プログラミング言語は Python です。デスクトップ アプリケーション、Web 開発、機械学習など、さまざまな業界で使用されています。幸いなことに、Python には初心者に適したシンプルで理解しやすい構文があります。この記事では、Python を使用して行列の右対角の合計を計算します。マトリックスとは何ですか?数学では、数学的オブジェクトまたはそのプロパティを記述するために長方形の配列または行列を使用します。これは、行と列に配置された数値、記号、または式を含む長方形の配列または表です。例: -234512367574 したがって、これは 3 行 4 列の行列であり、3*4 行列として表されます。さて、行列には 2 つの対角線、主対角線と副対角線があります。

Java プログラムを使用して合計スコアとパーセンテージを計算する方法を示します。合計スコアは利用可能なすべてのスコアの合計を指しますが、パーセンテージという用語は、計算されたスコアを合計スコアで割って、結果の数値 100 を掛けたものを指します。 percentage_of_marks=(obtained_marks/total_marks)×100 例 1 これは、合計スコアとパーセンテージを計算する方法を示す Java プログラムです。 //Totalmarks と Percentagecalculated をデモンストレーションする Java プログラムimportjava.io.*;publicclassTotalMarks_
