先看題吧
我猜到多數人開始想的就是二進位制暴力列舉,對吧,這題這樣做可以因為只需要提交答案,完全可以本地暴力,1e9的資料。需要一分鐘左右。
這裡我就不說著種方法了。
這題我們可以用,折半列舉。
優點:就是能夠將時間複雜度降下來,將2^30 變為 2^15 + 2^15
解決這題僅僅用了不到1s的時間
**也 相當於模板
1 #include 2 #include 3 #include4 #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號物品 分析 這個問題是前面介紹過的揹包問題,...