HDU 2209 翻紙牌遊戲(DFS)

2021-07-12 03:14:21 字數 956 閱讀 1983

description

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

input

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

output

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

sample input

01011

sample output

no1

分析:從最小結果出發,第一張紙牌只有兩種情況:1.翻轉,2:不翻轉而影響第一張紙牌的只有本身和第二張紙牌,(例如這組資料111111,就不翻轉第一張)

所以分兩種情況:1:第一張紙牌本身翻轉,然後搜尋第2,3,4,....n張並由第i-1張紙牌是否正面朝上而決定第i張是否翻轉(這樣就不影響第i-2張的狀態,第i-1張紙牌前的紙牌已全部正面朝上),最後只需要判斷第n張紙牌是否正面朝上即可

2:第一張紙牌本身不翻轉,然後過程和第1種情況一樣

#include#include#includeusing namespace std;

#define inf 9999999

int p[21];

int dfs(int i,int l,int num)

return dfs(i+1,l,num);

}int main()

{ char st[21];

int l,sum;

while(cin>>st)

{l=strlen(st);

sum=inf;

for(int i=0; i

HDU 2209 翻紙牌遊戲(C C )

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

HDU 2209 翻紙牌遊戲 模擬

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

HDU 2209 翻紙牌遊戲 解題報告

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