C++ 双数据类型背包

C++ 双数据类型背包,c++,algorithm,C++,Algorithm,对于我在互联网上看到的所有背包问题,所有这些问题的形式(成本、价值)都给定了成本变量的容量。所有这些问题似乎都只需要一个整数,这使得为Value和Keep数组创建一个2D数组非常方便。但是,如果成本变量不是整数而是双精度数据类型,该怎么办?无法基于双精度数据类型生成值并保留数组。我如何处理这种情况 例: 预算:3 458美元 项目名称(笔记本电脑)成本(1177.44)价值(131) 项目名称(桌面)成本(1054.44)价值(35) 项目名称(GPU)成本(1252.66)价值(105) it

对于我在互联网上看到的所有背包问题,所有这些问题的形式(成本、价值)都给定了成本变量的容量。所有这些问题似乎都只需要一个整数,这使得为Value和Keep数组创建一个2D数组非常方便。但是,如果成本变量不是整数而是双精度数据类型,该怎么办?无法基于双精度数据类型生成值并保留数组。我如何处理这种情况

例:

预算:3 458美元

项目名称(笔记本电脑)成本(1177.44)价值(131)

项目名称(桌面)成本(1054.44)价值(35)

项目名称(GPU)成本(1252.66)价值(105)


item_name(CPU)cost(946.021)value(136)

您可以扫描输入,寻找最小的指数(使用
frexp()
),并添加尾数精度(53位?),以找到一个比例因子,将所有数字转换为精确的比例整数


不过,您需要一个bigint库来处理生成的整数。

切换到一个动态程序,为每个值找到成本最低的解决方案,使用2D数组表示成本和保留,而不是值和保留。(程序之间的差别很小。)

为什么不能将整数存储在
double
s中?关键不是double不能保存整数,因为它们可以保存整数。主要的一点是,求解背包问题的方法需要2个2D数组,即值和保持。但该列是成本的整数。但是在这种情况下,代价是双精度的,这不可能构造2D数组,但是一个
struct{double cost;int value}
数组或
std::pair
或…的容器,然后将代价乘以1000,就得到了整数。因此,在代价是双精度且未定义精度的情况下,如何解决这个背包问题?