背包总重量约为10 ^ 9

时间:2012-12-06 05:30:05

标签: c++ c algorithm

我在几周前的编程竞赛中遇到了一个问题,问题可以归结为背包0/1问题。

但是我不能这样做,因为最大重量大约是10 ^ 9,所以在c ++中我不能使用数组。虽然项目数量约为10 ^ 5。

解决这个问题的一种方法是,我能想到的是使用STL地图,但不知道如何做到这一点。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您只需要一个庞大的阵列,为什么不将它分解为较小的阵列呢?

class Huge_array{
    public:
    Huge_array(size_t max_size):
        max_size(max_size),
        store(max_size/v_size, vector<int>(v_size))
        {}

    int& operator[](size_t index)
    {  
        assert(0<=index && index<max_size); 
        return store[index/v_size][index%v_size]; 
    }

    private:
    size_t max_size;
    const int v_size=100000;
    vector<vector<int> > store;
};

我希望它没有任何拼写错误 用法:

Huge_array my_array((size_t)10e9);
my_array[30000000]=10; // and so on upto size_t(10e9) - 1

如果您需要更大的值,可以vector<int>vector<long>vector<double>Huge_array中的任何内容。