acwing 飛行員兄弟 演算法高階指南

2021-10-08 09:21:10 字數 1121 閱讀 5820

題目鏈結

1題目是4*4的矩陣,資料範圍小,考慮暴力列舉

2對矩陣標號

0 1 2 3

4 5 6 7

8 9 10 11

12 14 14 15

3總共有16個位置,每乙個位置要麼選,要麼不選,所以情況有2^16種,我們採用二進位制列舉,從0~2 ^16-1,每乙個整數看他的16位二進位制數,對應位上有1就選。例如1二進位制為:0000 0000 0000 0001,只有第乙個位置有1,那麼我們選第乙個位置,把對應的行,對應的列改變 .

4因為是從0列舉到2^16-1,所以得到的答案滿足:

細節見**

//目標:全部變成減號

#include

using

namespace std;

const

int n =6;

char s[n]

[n];

char tmp[n]

[n];

typedef pair<

int,

int> pii;

typedef vector vec;

void

change

(int x,

int y)

if(tmp[x]

[y]==

'+') tmp[x]

[y]=

'-';

else tmp[x]

[y]=

'+';

return;}

//檢查是不是全部變成「-」了

bool

check()

}return1;

}int

main()

);}}

if(check()

)}printf

("%d\n"

,ans.

size()

);//注意輸出的時候要+1

for(

int i=

0;isize()

;i++

)return0;

}

AcWing 飛行員兄弟

資料範圍非常 小,可以列舉出所有的操作尋找最優解.如何列舉所有的操作?首先看出來這個問題有這樣的性質 如果改變了乙個把手的狀態,那麼就沒有必要再次改變它.改變多個把手狀態的順序對結果沒有影響.所以,所有的操作即為最終對於每把手進行狀態切換或者不進行狀態切換,也就是選或者不選的問題.共有16個把手,所...

Acwing 116 飛行員兄弟

飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...

飛行員兄弟

飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...