HDU 2209 翻紙牌遊戲 解題報告

2021-07-23 19:45:19 字數 951 閱讀 5848

description

有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態(有些朝正,有些朝反),現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌(由正翻到反,或者有反翻到正)時,他左右兩張紙牌(最左邊和最右邊的紙牌,只會影響附近一張)也必須跟著翻動,現在給你乙個亂的狀態,問你能否把他們整理好,使得每張紙牌都正面朝上,如果可以,最少需要多少次操作。

input

有多個case,每個case輸入一行01符號串(長度不超過20),1表示反面朝上,0表示正面朝上。

output

對於每組case,如果可以翻,輸出最少需要翻動的次數,否則輸出no。

sample input

01

011

sample output

no

1

一種解法是在網上看到解題思路,另一種是之後整理這道題的時候自己想的方法。

先說自己想的。紙牌數最多只有二十,因此一副紙牌的擺放方法最多只有2^20種。將這些擺法視為0~2^20-1這些數。利用visit陣列確定某種情況是否出現過,利用位運算的方法操作將某種情況轉化為對應的數,數0即表示全部正面朝上這種情況。bfs暴力搜尋。

#include #include #include using namespace std;

char p[25];

int vis[1048580];

int now;

struct node

n;int main()

i++;

return dfs(i,len,sum);

}int main()

{ while(scanf("%s",w)==1)

{int len=(int )strlen(w);

int min=wrong;

for(int i=0;i

HDU 2209 翻紙牌遊戲(DFS)

description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,...

HDU 2209 翻紙牌遊戲(C C )

problem description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 ...

HDU 2209 翻紙牌遊戲 模擬

有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,現在給你乙個亂的狀態,問...