題意:給一些集合,取一部分集合合併能夠得到多少個新集合。
解題思路:這道題數字最多只有14,可以用狀態壓縮去做,每一位代表某個數,0代表不取,1代表取這個數。剩下的就是去模擬狀態了。不多講,輸入狀態壓縮入門題。
#include#include#includeusing namespace std;
const int maxn = 105;
int n,m,set[maxn]; //s[i]表示第i個集合的狀態
bool vis[1<<14];
int main()
} int bit = 1 << m, ans = 0;
vis[0] = true;
for(int i = 0; i < bit; i++)
}printf("%d\n",ans);
} return 0;
}
hdu1074狀態壓縮
很明顯的狀態壓縮題目。當然了如果他的意識只有是求最小值沒有要求輸出那個輸出的順序,那麼直接用揹包,甚至是貪心都是可以做出來的,但是要求順序這個揹包的話沒有辦法吧資料記錄下來。所以用二進位制壓縮。所謂的二進位制壓縮就是用二進位制來表示事情的完成程度和狀況,比如1,就是0000001表示第乙個作業做了,...
1074 HDU 狀態壓縮
首先貼兩個狀態壓縮的題解,這是第乙個狀態壓縮dp,想了一下午,不知道是不是有點慢 然後在貼下我自己的 include include include include include include include include define ll int64 define max 1000009 ...
Hdu 1429(狀態壓縮)
有鑰匙和門的 bfs 狀態壓縮 乙個十把鑰匙和鎖,分別為a,b.j 當所用的步數小於 t即可。include include include includeusing namespace std int n,m,t,ans char map 21 21 int dir 4 2 int vis 21 ...