[英]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.