Menu
Coddy logo textTech

Knapsack Problem

Coddyの「再帰チャレンジ:再帰的思考をマスターしよう」コースのレッスン 7/15。

challenge icon

チャレンジ

中級

ナップサック問題は非常に有名な問題です。

この問題では、あらかじめ決められた許容重量を持つナップサックと、それぞれ重量と価値を持つアイテムがあります。

あなたのタスクは、ナップサックの重量制限の範囲内で、できるだけ多くの価値を詰め込むことです。 


例えば、

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;
}

再帰チャレンジ:再帰的思考をマスターしようのすべてのレッスン