/*
* 1.cpp
* * created on: 2023年8月30日
* author: administrator
*/#include #include #include using namespace std;
string result,s,lock;
int temp = 0 ,answer = 1e9, n;
void press(int i){
s[i-1] = s[i-1] == '1'?'0':'1';
s[i] = s[i] == '1'?'0':'1';
if(i+1>lock>>result;
s = lock;
n = lock.size();
//第一種情況,當前字元不相同時,從下乙個字元開始按按鈕
for( int i = 1; i看到輸入輸出首先想到的是列舉所有按鈕的狀態,但是n的範圍為30,所以會有2的30次方多種,所以肯定不能列舉出所有狀態,於是用到了乙個貪心策略,從左往右,如果按鈕不匹配就按下乙個按鈕,始終讓左面的按鈕是匹配的,如果遍歷到最後乙個按鈕不匹配則"impossible",否則輸出最少的按鈕次數。但是容易忽略乙個特殊情況,即前兩個按鈕,當前兩個按鈕不匹配時既可以按第乙個按鈕也可以按第二個按鈕,所以應當考慮這兩種情況最後哪中情況按的次數少。
001 特殊密碼鎖(貪心)
這道題不難,可以列舉來寫,每個鎖兩種狀態一共30個鎖2 30的複雜度可能不會超,在此提供另外一種貪心的思路。對於第乙個鎖,我們列舉 好吧算不上列舉 開或不開兩種情況。如果第乙個鎖不為目標狀態,那麼只有第二個鎖才能關掉它。依次類推,如果第i個鎖不為目標狀態,那麼只有第i 1個鎖才能關掉它 最後,我們只...
演算法實踐 特殊密碼鎖(列舉,貪心)
有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解決的問題是,你至少需要按...
特殊密碼鎖
有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解決的問題是,你至少需要按...