poj 1753 Flip Game 高斯消元

2021-06-22 23:29:42 字數 1638 閱讀 8604

因為目標狀態是全白或全黑,所以進行兩次高斯消元,每次若有自由變元的話要列舉自由變元求得最優解。

哇哦,怎麼就寫了200+行。

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define _ll __int64

#define eps 1e-12

#define pi acos(-1.0)

#define c 240

#define s 20

using namespace std;

const int inf = 0x3f3f3f3f;

int equ = 16;

int var = 16;

int x[20];

int a[20][20];

char s[5][5];

int x_free[20];

int free_num;

int gauss()

if(max_r != row)

if(a[row][col] == 0)

for(i = row+1; i < equ; i++)

row++;

col++;

} for(i = row; i < equ; i++)

if(a[i][var] != 0)

return -1;

if(row < var)

return var - row;

for(i = var-1; i >= 0; i--)

return 0;

}int solve()

else if(t > 0)

ans = min(ans,res);

} return ans; }}

void init() }}

int main()

init();

for(int i = 0; i < 4; i++) }

int sum = 0;

for(int i = 0; i < 16; i++)

if(sum == 0 || sum == 65535)

s1 = solve();

init();

for(int i = 0; i < 4; i++) }

s2 = solve();

if(s1 == -1 && s2 == -1)

printf("impossible\n");

else if(s1 == -1 && s2 != -1)

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

else if(s1 != -1 && s2 == -1)

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

else

printf("%d\n",min(s1,s2));

return 0;

}

POJ1753 flip Game翻轉棋盤

題目大意 有乙個4 4的方格,每個方格中放一粒棋子,這個棋子一面是白色,一面是黑色。遊戲規則為每次任選16顆中的一顆,把選中的這顆以及它四周的棋子一併反過來,當所有的棋子都是同乙個顏色朝上時,遊戲就完成了。現在給定乙個初始狀態,要求輸出能夠完成遊戲所需翻轉的最小次數,如果初始狀態已經達到要求輸出0。...

poj1753Flip Game 基本演算法之列舉

題意 有4 4的矩陣,每個方格都有乙個兩色黑白的棋子,每個棋子都可以任意翻轉,一次翻轉操作 上下左右以及自己本身5個棋子發生取反。問要將整個棋盤都置為全白或者全黑,至少要翻轉幾次。思路 資料範圍非常小,總共16顆棋子,每種棋子都有2中操作,翻與不翻 注意這個翻轉操作的執行順序對棋盤沒有影響 那麼總共...

POJ 1753 Flip Game 二進位制列舉

題型 列舉 題意 4 4的棋盤上面放了16盞燈,有黑有亮。每次按乙個燈,會改變本身及其上下左右四個燈的狀態,即黑變白或白變黑,問最少需要按幾次,可以將所有燈變為同一種狀態,不能變則輸出 impossible 分析 如果按個多個燈,可以發現,這些操作的順序是互不影響的。對於每個燈,按一次翻轉,再按一次...