np揹包問題 演算法 折半列舉

2022-05-07 15:09:08 字數 1010 閱讀 1897

先看題吧

我猜到多數人開始想的就是二進位制暴力列舉,對吧,這題這樣做可以因為只需要提交答案,完全可以本地暴力,1e9的資料。需要一分鐘左右。

這裡我就不說著種方法了。

這題我們可以用,折半列舉。

優點:就是能夠將時間複雜度降下來,將2^30 變為 2^15 + 2^15

解決這題僅僅用了不到1s的時間

**也 相當於模板

1 #include 2 #include 3 #include 

4 #include 5 using namespace std;

6 typedef long long ll;

78 constexpr size_t maxn = 100;

910 ll a[100];

11 mapstring> map1;

12 int main()

19 for(int i = 0; i < (1 << (n/2)); ++ i)

29else

30 a = a + '0';

31 }

3233 map1[sum] = a;

34 }

35 for(int i = 0; i < (1 << (n - n/2)); ++ i)

47else

48 a = a + '0';

49 }

5051 ll cd = value - sum;

5253 auto iter = map1.find(cd);//查詢

54if(iter != map1.end())

58 }

59return 0;

60 }

超大揹包問題 折半列舉

超大揹包問題 有重量和價值分別為wi,vi的n個物品,從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和的最大值。1 1 1因為wi,太大,陣列開不了,而我們發現n的數量較少,可以使用折半列舉。首先列舉前n 2個揹包的所有可能結果,儲存在結構體ps n sv ps n sw中,然後按sw...

超大揹包問題(折半列舉)

超大揹包問題 有重量和價值分別為w i v i 的n個物品,從這些物品中選出總重不超過w的物品,求所有挑選方案中價值總和的最大值 1 n 40 1 w i v i 1e15 1 w 1e15 輸入第一行為n,接著輸入一行w i 和一行v i 最後輸入w佔單獨一行 輸出單獨一行即所有挑選方案中價值總和...

超大揹包問題 (折半列舉)

題意 有重量和價值分別為wi,vi的n個物品。從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和的最大值。限制條件 1 n 40 1 wi,vi 10 的15次冪 1 w 10的15次冪 輸入 n 4 w v w 5 輸出 7 挑選0 1 3號物品 分析 這個問題是前面介紹過的揹包問題,...