簡體   English   中英

背包總重量約為10 ^ 9

[英]Knapsack with sum of weights of about 10^9

幾個星期前我在編程競賽中遇到了一個問題,問題可以歸結為背包0/1問題。

但我不能這樣做,因為最大重量大約是10 ^ 9,所以在c ++我不能使用數組。 雖然物品數量約為10 ^ 5。

解決這個問題的一種方法,我能想到的是使用STL地圖,但不知道如何做到這一點。

任何幫助,將不勝感激。 謝謝。

如果您只需要一個巨大的陣列,為什么不將它分解為較小的陣列?

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任何Huge_array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM