狀態壓縮2 poj3279

2021-07-30 04:33:01 字數 889 閱讀 4836

題意:給乙個15*15以內的01矩陣,可對矩陣中的數進行翻轉(0翻轉成1,1翻轉成0),翻轉時除自己以外,上下左右相鄰的數也會進行翻轉。求給出一種翻轉方案,翻轉次數最少,當有多種最少時給出字典序最小的方案。若不存在,輸出

"impossible"

主要看的別人講的題意,沒有去認真看題,不知道不存在是輸出"impossible",把我坑的不行了,看了別人的題解裡面有"impossible",才知道。。。

#include#include#include#include#include#include#include#include #include using namespace std;

#define all(x) (x.begin(),x.end());

#define pi acos(-1,0);

typedef long long ll;

int n,m;

const int maxn = 100000;

int ans[20][20]; //用於表示當前解

int cha[20][20];

int mat[20][20]; //用於儲存最初的矩陣

int cnt,cnta;

int fin[20][20]; //最優解的矩陣

bool ok(int i,int j) //判斷越界

void fan(int i,int j) //翻轉

void change(ll x) //二進位制轉換

}void aaa() //更改最優解

{ cnta=cnt;

for(int i=0;i

因為之前做的一道狀態壓縮dp的題,剛開始把只有一行的情況單獨討論,後來看別人的沒有這樣做,感覺自己的敏銳度還是不夠啊

上**!

poj3279 子集列舉 狀態壓縮暴力

題意 給你乙個n m的棋盤,有的棋子正面向上 0 有的棋子反面向上 1 問最少需要多少遍才能把所有的棋子變成正面向上?按字典序輸出每個位置翻轉的次數。這題剛開始想的時候,是想著dfs的,畢竟出現在dfs的專題裡面,原本的想法是記錄下為1的位置,那麼翻肯定就要在它們的附近翻,然後遍歷所有的翻法,可是在...

Fliptile POJ 3279(狀態壓縮)

題意 給你乙個n m的矩陣,元素為0 1,求把所有的元素變成0所需要的最少操作。每對乙個格仔操作,該十字格的元素反轉 分析 一看資料量 15,就有點狀態壓縮的感jio。從小到大列舉第一行的操作,因為第一行的操作決定了後面所有的操作,所以最後判斷對於第一行的操作是不是符合題意即可。1 include ...

POJ 3279Fliptile 狀態列舉 搜尋

題目傳送門 題意 給定長寬的黑白棋棋盤擺滿棋子,每次操作可以反轉乙個位置和其上下左右共五個位置的棋子的顏色,求要使用最少 翻轉次數將所有棋子反轉 為黑色的所需翻轉的是哪些棋子與次數。分析 首先根據題目,每次操作都會影響到周圍的 棋子 而要使得每個1都被反轉為0,那麼我們就應當每次都反轉1下方 的棋子...