Knapsack Problem
Coddyの「再帰チャレンジ:再帰的思考をマスターしよう」コースのレッスン 7/15。
チャレンジ
中級ナップサック問題は非常に有名な問題です。
この問題では、あらかじめ決められた許容重量を持つナップサックと、それぞれ重量と価値を持つアイテムがあります。
あなたのタスクは、ナップサックの重量制限の範囲内で、できるだけ多くの価値を詰め込むことです。
例えば、
values - [20, 5, 40, 10, 15]
weights - [1, 2, 8, 3, 7]
ナップサックの重量(Weight of knapsack) - 10
この場合の解決策は、重量が 1 と 8、価値が 20 と 40 のアイテムを取ることです。
最大価値は 60 となり、合計重量は 9 です(これは 10 以下であるため、有効な重量です)。
整数 W と、2つの整数の配列 values および weights を受け取り、入力値を用いたナップサック問題の解(ナップサックに入れることができる最大価値)を返す knapsack という名前の関数を作成してください。
自分で試してみよう
#include <stdio.h>
#include <stdlib.h>
int knapsack(int W, int* values, int values_size, int* weights, int weights_size) {
// ここにコードを記述してください
return 0;
}
再帰チャレンジ:再帰的思考をマスターしようのすべてのレッスン
2Medium Challenges
Knapsack ProblemNumber of SquaresInterleaving ResultSum CombinationsFind TripletSplit Array