description
有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態(有些朝正,有些朝反),現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌(由正翻到反,或者有反翻到正)時,他左右兩張紙牌(最左邊和最右邊的紙牌,只會影響附近一張)也必須跟著翻動,現在給你乙個亂的狀態,問你能否把他們整理好,使得每張紙牌都正面朝上,如果可以,最少需要多少次操作。
input
有多個case,每個case輸入一行01符號串(長度不超過20),1表示反面朝上,0表示正面朝上。
output
對於每組case,如果可以翻,輸出最少需要翻動的次數,否則輸出no。
sample input
01011
sample output
no1
一種解法是在網上看到解題思路,另一種是之後整理這道題的時候自己想的方法。
先說自己想的。紙牌數最多只有二十,因此一副紙牌的擺放方法最多只有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張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,現在給你乙個亂的狀態,問...