1. 程式人生 > >貪心演算法---特殊密碼鎖

貪心演算法---特殊密碼鎖

有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成(n<30),按鈕有凹/凸兩種狀態,用手按按鈕會改變其狀態。

然而讓人頭疼的是,當你按一個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的一個按鈕。

當前密碼鎖狀態已知,需要解決的問題是,你至少需要按多少次按鈕,才能將密碼鎖轉變為所期望的目標狀態。
輸入

兩行,給出兩個由0、1組成的等長字串,表示當前/目標密碼鎖狀態,其中0代表凹,1代表凸。
輸出
至少需要進行的按按鈕操作次數,如果無法實現轉變,則輸出impossible。
樣例輸入

011
000
樣例輸出

1
(1)由於每個鎖只有兩個狀態,0和1,考慮每個位置,如果需要翻轉,則只需翻轉1次便可以(翻轉兩次就又回去了);
(2)現在的問題是如何確定某個位置的鎖是否需要翻轉,現在假設這種情況:前N個鎖的狀態都相同,第n+1個鎖不同,為了達到目標,只需要翻轉後一個鎖就可以了。
(3)對於邊界的鎖需要特殊討論,如第一個鎖不相同時翻轉自身也可以達到相同效果。對於最後一個鎖,當前面都相同時而它自身不相同時,便是impossible的情況。

相關推薦

貪心演算法---特殊密碼鎖

有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成(n<30),按鈕有凹/凸兩種狀態,用手按按鈕會改變其狀態。 然而讓人頭疼的是,當你按一個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的一個按鈕。

貪心演算法:特殊密碼鎖

/* * 1.cpp * * Created on: 2017年8月30日 * Author: Administrator */ #include <iostream

演算法分析:特殊密碼鎖問題

上機程式碼: #include<iostream>   #include<cstring>   #include<algorithm>   using namespace std;   #define N 32 void

noiopenjudge8469:特殊密碼鎖 貪心

#include <cstdio> #include <cstring> #include <iostream> #include <cstdlib&g

MOOC程式設計與演算法(二)第一週測驗(2017夏季)特殊密碼鎖

特殊密碼鎖 特殊密碼鎖 Time Limit: 1000ms Memory Limit: 1024kB Description 有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成(n<30),按鈕有凹/凸兩種狀態,用手按按鈕會改變其狀態。 然而讓

題解——[APIO2015]巴厘島的雕塑 貪心+DP+特殊數據優化

ret div 沒有 最大 set ongl 每次 亂搞 api 寫了好久。。。。剛剛調了一個小時各種對拍,,,,最後發現是多寫了一個等號,,,,內心拒絕表示一開始看真的是各種懵逼啊在偷聽到某位大佬說的從高位開始貪心後發現可做首先考慮小數據(因為可以亂搞)所以先從高位開始枚

WUST Online Judge - 2104: 特殊密碼鎖

需要 oar n) clas out abs ted acc false 2104: 特殊密碼鎖 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 153 Accepted:

活動選擇問題_貪心演算法

貪心演算法 對於許多最優化問題,使用動態規劃演算法來求最優解有些殺雞用牛刀了,可以使用更加簡單、更加高效的演算法。貪心演算法就是這樣的演算法,它在每一步做出當時看起來最佳的選擇。也就是說它總是做出區域性最優的選擇,從而得到全域性最優解。   對於某些問題並不保證得到最優解,

貪心演算法之最大的子組合求解

      本來博主是沒有心情寫這篇部落格了,因為昨天住的地方遭賊了。半夜兩點多,偷開我家窗戶,把博主臥室裡面的玫瑰金給偷走了。當時博主就睡得特別不舒服,半夜醒來就發現手機被偷了。搞得博主後半夜基本沒有睡,萬幸的是,博主的手機開了“查詢iphone”功能,因此開啟了丟失

貪心演算法-Best Time to Buy and Sell Stock II

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profi

貪心演算法-過河問題

POJ題目連結:http://poj.org/problem?id=1700 N個人過河,船每次最多隻能坐兩個人,船載每個人過河的所需時間不同,問最快的過河時間。 思路: 當n=1,2,3時所需要的最小時間很容易求得,現在由n>=4,假設n個人單獨過河所需要的時間儲存在陣列t中,將陣列

貪心演算法-多機排程問題

  多機排程問題: 有n個獨立的作業需要在m臺相同的機器上進行加工處理. 作業i需要的加工時間為ti. 每個作業可以任選一臺機器加工, 但加工結束前不能中斷, 作業不允許拆分. 要求給一種作業排程方案, 使所給的n個作業在儘可能短的時間內完成. 問題分析: 為什麼是NP

貪心演算法-選擇不相交區間問題

解法一 按照左區間排序 import java.util.*; public class Zuidabuxiangjiaoshu2 { public static void main(String args[]){ Scanner in=new Scanner(Sys

貪心演算法-最優裝載問題

最優裝載問題。給出n個物體,第i個物體重量為w[i]。選擇儘量多的物體,使得總重量不超過C。  【分析】  由於只關心物體的數量,所有裝重的沒有裝輕的划算。只需把所有物體按重量從小到大排序,一次選擇每個物體,直到裝不下為止。這是一種典型的貪心演算法,只顧眼前,但能得到最優解。 -

找零問題(Java實現)——貪心演算法

貪心演算法也稱為貪婪演算法。 下述找零問題應用的方法就是貪心演算法。現在思考,有沒有更好的找零辦法,使找出的硬幣個數更少呢?也就是說,對於找零問題的這個例項,這個解是不是最優的呢?實際上,可以證明,就這些面額的硬幣來說,對於所有正整數的找零金額,貪心演算法都會輸出一個最優解。 貪心演算法在解

單源最短路徑(Dijkstra)——貪心演算法

  Dijkstra演算法是解單源最短路徑問題的貪心演算法。其基本思想是,設定頂點集合點集合S並不斷地做貪心選擇來擴充這個集合。一個頂點屬於集合S當且僅當從源到該頂點的最短路徑長度已知。初始時,S中僅含有源。設u是G的其一頂點。把從源到u且中間只經過S中頂點的路稱為從源到u的特殊

演算法貪心演算法

1. 定義 貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。 2. 基本要素 (1)貪心選擇 貪心選擇是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇

演算法學習——貪心演算法之可拆揹包

演算法描述 已知道n種物品和一個可容納c重量的揹包,第i種物品的重量為wi,價值為pi,裝包的時候可以把物品拆開(即可只裝每種物品的一部分),設計如何裝包,使裝包所得整體的價值最高? 演算法思路 首先,我們要知道,n種物品以及他們對應的價值,都是由使用者輸入的 我們使用貪心演算法,每

貪心演算法HURUST題目

題目描述: Yogurt factory The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 <= N <= 10,000) weeks, the p

演算法--貪心演算法的應用

一、思想 貪心演算法在每一步做出當時看起來最佳的選擇,也就是說總是做出區域性最優的選擇,希望這樣能得到全域性最優解,貪心演算法不一定能得到最優解,產生最優解的條件是: 1.最優子結構; 2.貪心選擇性:當一個問題的全域性解可以通過區域性最優解得到,就稱這個問題具有貪心選擇性。 證明思路:假定首選元素不