有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態(有些朝正,有些朝反),現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌(由正翻到反,或者有反翻到正)時,他左右兩張紙牌(最左邊和最右邊的紙牌,只會影響附近一張)也必須跟著翻動,現在給你乙個亂的狀態,問你能否把他們整理好,使得每張紙牌都正面朝上,如果可以,最少需要多少次操作。
有多個case,每個case輸入一行01符號串(長度不超過20),1表示反面朝上,0表示正面朝上。
對於每組case,如果可以翻,輸出最少需要翻動的次數,否則輸出no。
01011no1
我們從一邊開始翻牌(下面的**是從左邊開始)
對於第一張牌如果是1
可以翻它
可以翻第二張牌
不論翻第一張或者第二張,我們的目的是將第一張變為0
當第一張為0時,後續的牌如果是1就只能翻其下一張,(如果翻它會影響前面的牌)
於是後面的牌也就確定了
只需要對第一張牌翻與不翻進行兩次模擬,判斷是否能成功,如果兩種都能成功則取少的次數
#include#include#include#include#include#include#include#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int ans,ln,a[25],b[25];
void judge(int x,int v)
}if(x[ln-1]==0)
ans=min(ans,v);
}int main()
}
HDU 2209 翻紙牌遊戲(DFS)
description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,...
HDU 2209 翻紙牌遊戲(C C )
problem description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 ...
HDU 2209 翻紙牌遊戲 解題報告
description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,...