DLX重複覆蓋 hdu 2828 Lamp

2021-07-03 23:54:01 字數 931 閱讀 3729

題意:

有n個燈m個開關

每個燈的on和off狀態都能控制乙個燈是否亮

給出n行,代表對於每個燈

哪些開關的哪個狀態可以使得第i個燈亮

思路:這裡需要注意乙個問題 

如果開關1的on 狀態和開關2的on狀態能使得1號燈亮

那麼開關1、2同時處於on的時候 1號燈也是亮的。意思就是只要有乙個開關使得燈亮,燈就亮了。

簡單的dlx 重複覆蓋

行為每個開關的兩個狀態2*m行,列為n個燈

在搜尋的同時標記一下哪個開關被用過了

那麼另乙個狀態也不能用了

**:#include"stdio.h"

#include"algorithm"

#include"string.h"

#include"iostream"

#include"queue"

#include"map"

#include"vector"

#include"string"

using namespace std;

#define n 1005*1005

#define rn 1005

#define cn 1005

int us[rn];

struct dlx

c=m;

for(int i=1; i<=n; i++) h[i]=-1;

}void link(int x,int y)

}void del(int x)

}void rec(int x)

}int used[cn];

int h()

}return sum;

}int dance(int x)

int now=r[0];

for(int i=r[0]; i!=0; i=r[i])

{if(s[i]

DLX反覆覆蓋 hdu 2828 Lamp

題意 有n個燈m個開關 每乙個燈的on和off狀態都能控制乙個燈是否亮 給出n行,代表對於每乙個燈 哪些開關的哪個狀態能夠使得第i個燈亮 思路 這裡須要注意乙個問題 假設開關1的on 狀態和開關2的on狀態能使得1號燈亮 那麼開關1 2同一時候處於on的時候 1號燈也是亮的。意思就是僅僅要有乙個開關...

HDU 2828 Lamp DLX重複覆蓋

有n盞燈和m個開關,一盞燈可以被很多開關控制,有些開關的開和關是顛倒的,對於一盞燈,只要有乙個開關是符合條件的,那麼這盞燈就會亮。求一組開關的方案,使所有燈是開啟的,並輸出方案,不能的話輸出 1 每個開關有開和關兩種,所以2 m行n列。因為任一開關的開和關不能並存,所以不能直接套重複覆蓋模板,稍微修...

DLX 精確覆蓋 重複覆蓋

給定乙個n m的矩陣,有些位置為1,有些位置為0。如果g i j 1則說明i行可以覆蓋j列。problem 1 選定最少的行,使得每列有且僅有乙個1.2 選定最少的行,使得每列至少乙個1.這類屬於np問題的問題,可以使用搜尋解決。但是普通的搜尋必超時無疑。因此我們要設法加優化來加快速度。dancin...