数値を3つの部分に分割して、最大合計を求めます
たとえば、50を{25、16、12}に分割し、各セット{25、16、12}を再び3つの分割に分割することができます。最大3回の除算を完了した後、合計を計算して最大値を見つけます。
このプログラムは再帰的に解決できますが、再帰的アプローチでは、同じ結果を複数回見つける必要があるため、動的計画法アプローチを使用して以前に計算されたデータをテーブルに格納すると、時間。
入力と出力
Input: Let the given number is 12. Output: The answer is 13. At first divide the 12 as (12/2 + 12/3 + 12/4) = 6 + 4 + 3 = 13. now divide 6 into three parts (6/2 + 6/3 + 6/4) = 3 + 2 + 1 = 6. If we divide the 4 and 3, we can get maximum 4 from them. From all values the maximum is 13.
アルゴリズム
maxBreakSum(n)
入力: 与えられた数。
出力: 壊れた後の最大合計。
Begin define sums array of size n+1 sums[0] := 0, sums[1] := 1 for i in range 2 to n, do sum[i] := maximum of i and (sums[i/2] + sums[i/3] + sums[i/d]) done return sums[n] End
例
#include<iostream> #define MAX 1000000 using namespace std; int max(int a, int b) { return (a>b)?a:b; } int maxBreakSum(int n) { int sumArr[n+1]; sumArr[0] = 0, sumArr[1] = 1; //for number 0 and 1, the maximum sum is 0 and 1 respectively for (int i=2; i<=n; i++) //for number 2 to n find the sum list sumArr[i] = max(sumArr[i/2] + sumArr[i/3] + sumArr[i/4], i); //divide number by 2, 3, 4 return sumArr[n]; } int main() { int n; cout << "Enter a number: "; cin >> n; cout << "Maximum sum after breaking: " << maxBreakSum(n); }
出力
Enter a number: 12 Maximum sum after breaking: 13
-
文字列をPythonで一意のサブ文字列の最大数に分割することを見つけるプログラム
文字列sがあるとすると、指定された文字列を分割できる一意のサブ文字列の最大数を見つける必要があります。文字列を空でないサブ文字列の任意のリストに分割して、サブ文字列の連結が元の文字列を形成するようにすることができます。ただし、すべてが同じになるように部分文字列を分割する必要があります。 したがって、入力がs =pqpqrrrの場合、[p、q、pq、r、rr]のように分割できるため、出力は5になります。 [p、q、p、q、r、rr]のように分割すると、ここではpとqが複数回存在するため、無効になります。 これを解決するには、次の手順に従います- res:=1つの要素のみを含むリスト0 関
-
Pythonプログラムで数の偶数因子の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math