0-1ナップサック問題を解決するためのC++プログラム
0-1ナップサック問題では、それぞれに重みと値を持つアイテムのセットが与えられます。合計重量が指定された制限以下になり、合計値が可能な限り大きくなるように、コレクションに含める各アイテムの数を決定する必要があります。
入力
Value = [10, 20, 30, 40, 60, 70] Weight=[1, 2, 3, 6, 7, 4] int w=7
出力
knapsack value is: 100
アルゴリズム
Begin Input: set of items each with a weight and a value Set knapsack capacity Number of items=sizeof(values) / sizeof(values[0]) Knapsack(Values (stored in array v), Weights (stored in array w), Number of distinct items (n), Knapsack capacity W) If (w < 0) Return If no items left or capacity becomes 0 Return 0 Include current item n in knapSack (v[n]) and recurs for remaining items (n - 1) with decreased capacity (W - w[n]) Exclude current item n from knapSack and recurs for remaining items (n - 1) Return maximum value we get by including or excluding current item End
サンプルコード
#include <iostream> #include <climits> using namespace std; int knapSack(int v[], int w[], int n, int W) { if (W < 0) return INT_MIN; if (n < 0 || W == 0) return 0; int in = v[n] + knapSack(v, w, n - 1, W - w[n]); int ex = knapSack(v, w, n - 1, W); return max (in, ex); } int main() { int v[] = { 10, 20, 30, 40, 60, 70 }; int w[] = { 1, 2, 3, 6, 7, 4 }; int W = 7; int n = sizeof(v) / sizeof(v[0]); cout << "Knapsack value is " << knapSack(v, w, n - 1, W); return 0; }
出力
Knapsack value is 100
-
ヴィジュネル暗号を実装するためのC++プログラム
Vigenere Cipherは、アルファベットのテキストを暗号化する一種の多表式置換方法です。 この方法での暗号化と復号化には、AからZまでのアルファベットが26行で書き込まれるVigenereCipherTableが使用されます。 暗号化 キー: ようこそ メッセージ: Thisistutorialspoint ここでは、指定されたキーの長さが元のメッセージの長さと等しくなるまで、そのキーを繰り返してキーを取得する必要があります。 暗号化の場合は、メッセージの最初の文字とキー(TとW)を取得します。V行とW列が一致するVigenere Cipher Tableのアルファベ
-
0-1ナップサック問題のためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − n個のアイテムの重みと値が与えられているので、これらのアイテムを最大容量wまでの容量Wのバッグに入れる必要があります。最大数のアイテムを運び、その価値を返す必要があります。 次に、以下の実装のソリューションを見てみましょう- #ブルートフォースアプローチ 例 #Returns the maximum value that can be stored by the bag def knapSack(W, wt, val, n): # initial conditions &n