2016-04-06 20 views
3

これまでにインターネットで見たナップザックの問題はすべて、コスト変数の容量を考慮した形(コスト、値)を持っています。すべての問題は、ValueとKeep配列の2D配列を作成するのに非常に便利な整数だけのコストを持つようです。しかし、コスト変数が整数ではなく、2倍のデータ型の場合はどうでしょうか?ダブルデータ型に基づいてValueおよびKeep配列を作成する方法はありません。どのように私はこの状況に近づけることができる?二重データ型のナップザック

例:

予算:$ 3458

ITEM_NAME(ラップトップ)のコスト(1177.44)値(131)

ITEM_NAME(デスクトップ)コスト(1054.44)値(35)

ITEM_NAME (GPU)コスト(1252.66)値(105)

item_name(CPU)コスト(946.021)値(136)

+0

整数を 'double 'に格納できないのはなぜですか? – owacoder

+0

これは可能なので、doubleは整数を保持できないということではありません。要点は、Knapsach問題を解決する方法は2次元配列、すなわちValueとKeepを必要とすることです。しかし、列はコストの整数です。しかし、この場合、コストは2倍であり、2D配列を構築することはできません。 –

+0

しかし、 'struct {double cost; 'std :: pair 'または.... – VolkerK

答えて

0

最小の指数(frexp()を使用)を入力し、仮数精度(53ビット?)を追加すると、すべての数値を整数に正確に比例する変換係数を見つけることができます。

結果の整数を処理するにはbigintライブラリが必要です。

1

値とコストの代わりにコストと保存の2D配列を使用して、各値に対して最もコストのかかるソリューションを見つける動的プログラムに切り替えます。 (プログラム間の違いは軽微です)