HDU 4462 暴力二進位制列舉

2021-09-12 22:20:27 字數 1117 閱讀 2408

1.題目鏈結。題目大意:john有一塊農田,現在他需要在農田k個空閒的位置放置驅逐bird的scarecrows。已知每個scarecrows各異保護的範圍是距離它哈密頓距離不超過k的地方,現在給你這k個點的座標,求出最少需要放置多少個scarecrows才能保護好整片農田。

2.由於k很小,不超過10.所以我們可以直接列舉所有的組合。網上很多題解都是說列舉,但是很少有說明為什麼是可以這樣列舉的,所以對於很多剛剛學習這一知識的人不是很友好,看了半天的**也是一頭霧水,現在我簡單的說一下自己的看法。我們知道,k個scarecrows一共有pow(2,k)個狀態,這個很好理解,因為每乙個scarecrows都是有兩種狀態,選或者不選。所以我們把考慮乙個二進位制維k位的整數,其中每一位對應的就是這個編號為i的scarecrows的狀態。舉個例子:比如12=1100.假設我們有四個scarecrows,那麼12代表的就是第1,2個不選,第3,4個選。這也就是狀態的壓縮,那麼我們知道從0到pow(2,k-1)這些資料的二進位制位就代表了所有的情況,所以我們從0列舉到pow(2,k)-1.對於每乙個數字,把他們為1的所有位數取出來,這樣我們就知道到底選了哪幾個,然後檢查答案即可。

#include using namespace std;

typedef long long ll;

int r[51], c[51];

int f[51];

int n;

int m;

int vis[51][51];

int a[10];

const int inf = 1e9 + 10;

#pragma warning(disable:4996)

int main()

}if (vis[ii][jj] == 0)

flag = 0;

if (!flag)

break;

}if (!flag)

break;

}if (flag)

res = min(res, num);

} if (res == inf)

puts("-1");

else

printf("%d\n", res);

} 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。每個元素限選一次,不能乙個都不選。關於這個題目,我們很容易想到的便是對所有元素進行暴力搜尋,然後進行剪枝便可。下面我將介紹二進位制列舉的思路和流程來巧妙的解決這個問題。對任一數來說,所面臨的問題是取或不取,在二進...