ゲームで特定のスコアに到達する方法の数を数える
プレーヤーが各動きで3、5、または10のスコアを獲得できるゲームを考えてみましょう。目標スコアも表示されます。私たちの仕事は、これらの3つのポイントでその目標スコアに到達するための可能な方法がいくつあるかを見つけることです。
動的計画法のアプローチにより、0からnまでのすべてのスコアのリストを作成し、3、5、10の値ごとに、テーブルを更新するだけです。
入力と出力
Input: The maximum score to reach using 3, 5 and 10. Let the input is 50. Output: Number of ways to reach using (3, 5, 10)50: 14
アルゴリズム
countWays(n)
可能なスコアは3つだけで、3、5、10です
入力: nは到達する最大スコアです。
出力- スコアnに到達するための可能な方法の数。
Begin create table of size n+1 set all table entries to 0 table[0] := 1 for i := 3 to n, do table[i] := table[i] + table[i-3] done for i := 5 to n, do table[i] := table[i] + table[i-5] done for i := 10 to n, do table[i] := table[i] + table[i-10] done return table[n] End
例
#include <iostream> using namespace std; // Returns number of ways to reach score n int countWay(int n) { int table[n+1], i; //table to store count for each value of i for(int i = 0; i<=n; i++) { table[i] = 0; // Initialize all table values as 0 } table[0] = 1; //set for 1 for input as 0 for (i=3; i<=n; i++) //try to solve using 3 table[i] += table[i-3]; for (i=5; i<=n; i++) //try to solve using 5 table[i] += table[i-5]; for (i=10; i<=n; i++) //try to solve using 10 table[i] += table[i-10]; return table[n]; } int main() { int n; cout << "Enter max score: "; cin >> n; cout << "Number of ways to reach using (3, 5, 10)" << n <<": " << countWay(n); }
出力
Enter max score: 50 Number of ways to reach using (3, 5, 10)50: 14
-
C++でセットをk個のサブセットに分割する方法の数を数えます
与えられた2つの数字eとp。目標は、セットのe個の要素をp個のパーティション/サブセットに分割できる方法の数を数えることです。 例 入力 e=4 p=2 出力 Count of number of ways to partition a set into k subsets are: 7 説明 If elements are: a b c d then ways to divide them into 2 partitions are: (a,b,c)−(d), (a,b)−(c,d), (a,b,c)−(d), (a)−(b,c,d), (
-
Pythonで指定された数のビット1の数を見つけるプログラム
数nがあるとすると、その数のバイナリ表現に存在するビット1の数を見つける必要があります。 したがって、入力が12のような場合、出力は2になります これを解決するには、次の手順に従います- count:=0 nがゼロ以外の場合は、 count:=count +(n AND 1) n:=(n / 2)のフロア 返品数 理解を深めるために、次の実装を見てみましょう- 例 class Solution: def solve(self, n): count = 0 whi