貪心演算法 特殊密碼鎖

2021-08-07 14:20:58 字數 665 閱讀 7657

/*

* 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 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解決的問題是,你至少需要按...