暴力列舉相關問題 利用二進位制列舉法

2021-08-16 19:26:14 字數 1169 閱讀 2973

話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒兩斗。他邊走邊唱:

1. 無事街上走,提壺去打酒。

2. 逢店加一倍,遇花喝一斗。

這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,有多少種可能得方案。

1. 此題求的是總的可能方案,利用dfs暴力列舉,是經常見到的方案,但是會產生很多輔助空間的浪費。

2. 利用二進位制列舉是乙個不錯的方案,因為總共才遇店5次,遇花10次。將遇店看成二進位制中的1,遇花看成二進位制中的0。可以列舉出14位二進位制來表示。

3.判斷思路即為二進位制中是否有9個0,5個1,並且最終正好剩餘酒1鬥。

int ans = 0; // 合法方案數

for(int i=0; i<(1<<14); ++i)

for(int b=0;b<(1《幼兒園有n個小朋友,每個小朋友都有自己想玩的玩具。現在要買一批玩具,經費有限。只能買m個玩具。已知商店一共賣k種玩具,編號為1,2,3……k,你讓小朋友把想玩的編號都寫在了紙上。你希望盡可能滿足多的小朋友的需求,請你計算最多能滿足多少個小朋友的玩具需求。

輸入格式:

第一行,n,m,k(1 <= n <= 100,1 <= m <= k <= 15),中間用空格分開。

接下來n行,第i+1行的第乙個數字ai代表第i個小朋友想玩的玩具數量,接下來有ai個數字,代表這個玩具的編號。

輸出格式:

輸出乙個整數,代表最多能滿足多少個小朋友的玩具需求。

1. 看到此題的玩具總數k不超過15。應當可以想到依然使用二進位制列舉的方法,設定k位二進位制數,第i位為1代表第i+1個玩具買了,為0代表第i+1個玩具不買。

2. 然後先判斷當前二進位制數,中為1的是否為m。在比較滿足的小朋友個數,最後挨個比較完後,就可以求出最大滿足小朋友個數。

#include#include#includeusing namespace std;

int main()

} // 開始計算

int maxnum = 0;

int curnum = 0;

for(int i=0; i<(1maxnum = curnum;

} cout << maxnum << endl;

return 0;

}

二進位制列舉

fliptile 乙個反轉問題,大意是一頭牛要反轉木板,木板有黑和白,全部翻成白色的反法 輸出。小蒟蒻根本想不到 參考了大佬的部落格。點此轉入 把第一行的全部翻法都試一遍,然後看哪種的步數最少。好難想。include include int maze 20 20 int t 20 20 int f ...

二進位制列舉

一 二進位制操作 算數字運算 a 60 0011 1100 b 13 0000 1101 1.與 兩個二進位制數,同 1為 1,否則為 0。a b 12 0000 1100 2.或 兩個二進位制數,同 0為 0,否則為 1。a b 61 0011 1101 3.非 按位取反 對二進位制每一位進行了一...

二進位制列舉

讓我們從乙個題目入手 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。關於這個題目,我們很容易想到的便是對所有元素進行暴力搜尋,然後進行剪枝便可。下面我將介紹二進位制列舉的思路和流程來巧妙的解決這個問題。對任一數來說,所面臨的問題是取或不取,在二進...